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" />
相关推荐
tuokuac10 分钟前
批量新增操作为什么要加@Transactional注解
数据库
q***46522 小时前
Spring中使用Async进行异步功能开发实战-以大文件上传为例
java·后端·spring
万物皆字节2 小时前
spring ai 初始化工具,代码链分析
spring
q***9942 小时前
Redis的Spring配置
数据库·redis·spring
S***y3963 小时前
MySQL视频
数据库·mysql
q***49453 小时前
SpringGateway网关(Spring Gateway是Spring自己编写的,也是SpringCloud中的组件)
spring·spring cloud·gateway
周杰伦fans3 小时前
[特殊字符] 代理模式超详细讲解 ——.NET
数据库·c#·代理模式
TDengine (老段)4 小时前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
2301_800256114 小时前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql
冰封剑心4 小时前
MiniCPM-V-2_6 (4-bit 量化)使用
java·前端·数据库