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

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

#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 MVC 和 Spring 整合的时候,SpringMVC的dispatcher-servlet.xml文件中配置扫描包,不要包含 service的注解,Spring的applicationContext.xml文件中配置扫描包时,不要包含controller的注解,如下所示:

Spring MVC dispatcher-servlet.xml:

    <context:component-scan base-package="com.qding">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context:component-scan>

Spring MVC启动时的配置文件,包含组件扫描、url映射以及设置freemarker参数,让spring不扫描带有@Service注解的类。为什么要这样设置?因为springmvc.xml与applicationContext.xml不是同时加载,如果不进行这样的设置,那么,spring就会将所有带@Service注解的类都扫描到容器中,等到加载applicationContext.xml的时候,会因为容器已经存在Service类,使得cglib将不对Service进行代理,直接导致的结果就是在applicationContext 中的事务配置不起作用,发生异常时,无法对数据进行回滚。以上就是原因所在。

同样的在Spring的applicationContext.xml配置如下:

    <context:component-scan base-package="com.qding">           
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

context:component-scan/ 扫描指定的包中的类上的注解,常用的注解有:

@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不好归类时. 
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 默认按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的作用域

转载于:https://my.oschina.net/xianggao/blog/524805

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring AOP 对Spring MVC的Controller切面拦截不起作用 的相关文章

随机推荐

  • 信息树和XML文件的遍历及XML文件的应用

    function Save 将INfomationTree中的不是Http开头的组 xff0c 保存到本地 xff0c 然后再从本地上传到服务器端 var IInformationTree 61 document parentWindow
  • chapter 4: A literature review(re-read papers to gain fresh understanding)

    chapter 4 A literature review re read papers to gain fresh understanding 1 Writing for Science and Engineering Papers Pr
  • Connect to a Windows PC from Ubuntu via Remote Desktop Connection

    http www 7tutorials com connecting windows remote desktop ubuntu A useful feature of Windows is being able to connect to
  • HTTP MIME type

    扩展名 类型 子类型 IIS 4 0 IIS 5 0 application octet stream 是 是 323 text h323 否 是 acx application internet property stream 否 是 a
  • [资源分享]Linode免费使用 [ 资源分享 ]

    Linode 是目前最优秀的 VPS 服务提供商 最近 xff0c Linode 推出了一种全新的 Linode 帐户注册方式 xff0c 该方式允许用户试用 Linode VPS 4个小时的时间而不需要输入付款信息 xff08 只要有邮箱
  • iOS9 Search API 之 Spotlight

    iOS9以后 有三种api提供搜搜方式 加强引导用户关注 我们的app及相关内容的方式 NSUserActivity Web Markup Core Spotlight 用法 前两种 实战操作性不够强 后续补充 这里先讲 spotlight
  • AngularJS优缺点、使用场景

    AngularJS 优缺点 优点 xff1a AngularJS模板功能强大丰富 xff0c 自带了极其丰富的angular指令 AngularJS是完全可扩展的 xff0c 与其他库的兼容效果很好 xff0c 每一个功能可以修改或更换 x
  • 面试准备

    首行占位 Python相关 1 Python3特性和变化 1 Python3默认编码是UTF 8 xff0c 2为ASCII 2 Python3中只有int xff0c 2中有int跟long xff0c 其中int不能超过sys maxi
  • matlab练习程序(地图上画经纬度)

    需要看下生成的数据在地球上的经纬度具体位置 投影为墨卡托投影 clear all close all clc load coast a 61 load 39 out txt 39 自己的经纬度数据 axesm mercator plotm
  • 让history记录命令的历史执行时间

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 让 history记录命令的历史执行时间 由于 Linux默认的 history记录仅保存了命令的内容 xff0c root 64 oracle history 1 dat
  • windows server 2012 R2登录密码忘了怎么办呢?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 先确定是否开启了内置管理员 xff0c 或是还建立了其他的管理员账户 如果有的话 xff0c 请先以其他管理员账户登入电脑 xff0c 在本地计算机和组中 xff0c 更改
  • VR的商業模式

    1 硬件销售 根据Digi Capital预估 xff0c 在5年内 xff0c AR VR将会有数亿量级的用户数 从免费到高端系统 xff0c 硬件销售将获利最多 届时每由AR VR生成的10美元利润 xff0c 就有4美元收入属于硬件销
  • RabbitMQ知多少

    1 引言 RabbitMQ Rabbit Message Queue的简写 xff0c 但不能仅仅理解其为消息队列 xff0c 消息代理更合适 RabbitMQ 是一个由 Erlang 语言开发的AMQP xff08 高级消息队列协议 xf
  • 远程控制软件VNC教程和对内网机器控制的实现

    远程控制软件VNC教程和对内网机器控制的实现 作者 Hoky ORG 出处 Hoky ORG 77 砖 82 好 评论 12 条 进入论坛 更新时间 xff1a 2006 01 25 16 02 关 键 词 xff1a 远程控制软件VNC
  • MariaDB 10.3支持update多表ORDER BY and LIMIT

    MariaDB 10 3支持update多表ORDER BY and LIMIT 1 xff09 update连表更新 xff0c limit语句 update t1 join t2 on t1 id 61 t2 id set t1 nam
  • 细胞自动机

    细胞自动机是指定形状的网格上的 有色 单元的集合 xff0c 其根据基于相邻单元的状态的一组规则通过多个离散时间步长演变 然后根据需要迭代地应用规则多个时间步长 冯 诺伊曼是最早考虑这种模型的人之一 xff0c 并将细胞模型纳入他的 通用构
  • centos 常见故障排除

    centos 常见故障排除 实现环境 xff1a Centos x86 64 1 MBR故障和解决办法 xff08 1 xff09 模拟MBR故障 第一步 xff1a MBR中bootloader有446个字节 xff0c 在这里把这446
  • manjaro linux必装工具,在Manjaro系统中安装常用软件的方法

    本文介绍在Manjaro系统中安装一些常用的软件 xff0c 有vim chrome 截图 TIM 网易云音乐 搜狗输入法 markdown编辑器 pdf阅读器 steam git客户端 下载工具uget 视频播放器 zsh 前言 更换为中
  • 10款基于HTML5+CSS3实现的超酷源码动画

    1 基于Bootstrap的jQuery登录表单 这是一款基于Bootstrap的登录表单 xff0c 表单的外观自然不用说 xff0c 沿用了Bootstrap的风格 xff0c 非常漂亮 这款登录表单有一个经过CSS3处理过的头像图片
  • Spring AOP 对Spring MVC的Controller切面拦截不起作用

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 问题描述 当使用Spring AOP对Controller层的Controller类的方法进行切面拦截 xff0c 不起作用 AOP配置没有任何问题 2 排查过程 Sp