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" />
相关推荐
这是程序猿8 分钟前
基于java的ssm框架经典电影推荐网站
java·开发语言·spring boot·spring·经典电影推荐网站
Apache Flink15 分钟前
Flink + Fluss 实战: Delta Join 原理解析与操作指南
大数据·数据库·flink
·云扬·20 分钟前
MySQL中count(*)深度解析与性能优化实践
数据库·mysql·性能优化
jiayong2321 分钟前
海外求职平台与策略指南
java·spring
SadSunset29 分钟前
(37)全注解式开发AOP
java·spring
Predestination王瀞潞44 分钟前
数据库MongoDB 8.2.3和Shell工具的安装
数据库
MediaTea1 小时前
Python:实例 __dict__ 详解
java·linux·前端·数据库·python
今夕资源网1 小时前
如何修复“无需升级,您的WordPress数据库已经是最新的了”无限死循环
数据库·wordpress
盛世宏博北京1 小时前
学校图书馆自动化恒温恒湿控制系统技术方案
网络·数据库·人工智能
Sammyyyyy1 小时前
MongoDB 的文档模型与 CRUD 实战
开发语言·数据库·mongodb·servbay