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" />
相关推荐
摇滚侠4 分钟前
Spring Boot3零基础教程,定制 Health 健康端点,笔记83
spring boot·笔记·spring
芙蓉王真的好19 分钟前
优化 Jenkins 构建脚本:避免 pnpm lockfile 相关报错的关键配置
spring·servlet·jenkins
l1t14 分钟前
Duckdb rusty_sheet插件使用心得
数据库·sql·lua·duckdb·rusty_sheet
asdfsdgss20 分钟前
PostgreSQL 教程:json 与 jsonb 的数据验证机制差异及实战选择
数据库·postgresql·json
座山雕~24 分钟前
MYSQL-超全基础以及用法--仅个人的速记笔记(1)
数据库·mysql
喜欢读源码的小白29 分钟前
Spring Boot+MyBatis实现无限层级组织架构设计|邻接表vs闭包表性能对比|树形结构数据存储方案
java·数据库·组织结构·树级层级·无线层级
ysdysyn1 小时前
Java奇幻漂流:从Spring秘境到微服务星辰的冒险指南
java·spring·微服务
FJW0208141 小时前
关系型数据库大王Mysql——DML语句操作示例
数据库·mysql
禁默1 小时前
基于金仓KFS工具,破解多数据并存,浙人医改造实战医疗信创
数据库·人工智能·金仓数据库
pen-ai1 小时前
【数据工程】15. Stream Query Processing
数据库