Spring MVC 的Controller切面拦截不起作用?

1 问题描述

当使用Spring AOP对Controller层的Controller类的方法进行切面拦截,不起作用。AOP配置没有任何问题。

2 排查过程

  1. Spring AOP配置没有任何问题;【正常】
  2. 断点调试:Spring源码断点调试,在调用Controller方法时,Controller的实例被JDK进行动态代理了;【不正常】
  3. Spring默认的代理方式为JDK动态代理;【正常】

3 解决问题

AOP有的人说拦截不到Controller。有的人说想拦AnnotationMethodHandlerAdapter截到Controller必须得拦截org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

首先AOP可以拦截到Controller的,这个是毋容置疑的,其次须拦截AnnotationMethodHandlerAdapter也不是必须的。最起码我没有验证成功过这个。这个方式就不在这儿介绍说明了。

AOP之所以有的人说拦截不到Controller, 原因是该注解的Controller已被spring容器内部代理了。我们只要把它交给cglib代理就可以了。Spring MVC的配置文件dispatcher-servlet.xml:

复制代码
<!-- 通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller --> 
<aop:aspectj-autoproxy proxy-target-class="true" />
相关推荐
7***68433 分钟前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
L***d6709 分钟前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
java_logo12 分钟前
MySQL Server Docker 容器化部署指南
linux·运维·数据库·docker·容器
likuolei12 分钟前
XSL-FO 软件
java·开发语言·前端·数据库
凌波粒12 分钟前
SpringBoot基础教程(2)--yaml/配置文件注入/数据校验/多环境配置
java·spring boot·后端·spring
p***950013 分钟前
Springboot3 Mybatis-plus 3.5.9
数据库·oracle·mybatis
CS_浮鱼14 分钟前
【MySQL】InnoDB存储引擎
数据库·mysql
合作小小程序员小小店15 分钟前
桌面开发,在线%信息管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#
q***188417 分钟前
解决phpstudy无法启动MySQL服务
数据库·mysql·adb
e***956418 分钟前
【HTML+CSS】使用HTML与后端技术连接数据库
css·数据库·html