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" />
相关推荐
Crazy_eater7 小时前
Mysql(6)--基础查询
数据库·mysql
添砖java‘’7 小时前
MySQL事务
数据库·mysql
身如柳絮随风扬8 小时前
MongoDB 典型使用场景深度解析:从订单冷热分离到社交地理查询
数据库·mongodb
minji...8 小时前
MySQL数据库 (一) MySQL数据库基础,MySQL架构,存储引擎,SQL语句分类
数据库·mysql·oracle·sql语句·存储引擎··mysqld
梦想的颜色9 小时前
MySQL 查询性能核武器
运维·服务器·数据结构·数据库·mysql
haven-8529 小时前
mysql索引当中的B+树,聚簇/二级索引,最左匹配,失效场景
数据库·b树·mysql
starsky7623810 小时前
基于 Spring AI 构建具备记忆与情绪的多角色 Agent 系统
人工智能·spring·架构
KaiwuDB10 小时前
KWDB SampleDB 上新|用 Agent Skill 跑通数据库示例
数据库
王五周八10 小时前
玩转 Spring AI Agent:基于 SpringBoot 集成 AI 工具与 Skills 能力实践
java·spring
计算机安禾10 小时前
【算法分析与设计】第43篇:空间复杂度类与Savitch定理
java·服务器·网络·数据库·算法