Spring AOP无法拦截springMVC的controller的方法

在实现项目国际化的时候,需要写后端信息的国际化处理,需要修改的地方太多就想着使用Spring的AOP来进行处理。写完AOP后,发现开启AOP代理后无法拦截SpringMVC的controller的方法,但是却可以拦截Service层的方法。

未修改前的时候:

AOP配置代码单独写在spring-mvc-aop.xml配置文件中。
image.png

Spring MVC的配置文件Spring-mvc.xml的主要内容是Controller层的自动扫描配置。

Spring的配置文件spring-mvc-hibernate.xml的主要内容是dao层和Service层的自动扫描配置。

参照网上的搜索结果。

因为Spring的Bean扫描和SpringMVC的Bean扫描是分开的,两者的Bean位于两个不同的Application,而且Spring-MVC的Bean扫描要早于Spring的Bean扫描,所以当Controller Bean生成完成后,再执行Spring的Bean扫描,Spring会发现要被AOP代理的Controller Bean已经在容器中存在,配置AOP就无效了。

同样这样的情况也存在于数据库事务中,如果Service的Bean扫描配置在spring-mvc.xml中,而数据库事务管理配置在spring-mvc-hibernate.xml,会导致数据库事务失效,原理一样。这也就解释了前面开发者写的加载controller的时候不加载service,因为此时事务并未生效,若此时加载了service,那么事务无法对service进行拦截。

image.png

所以这里,我们需要把AOP放置在Controller扫描配置的文件中,即在我上述项目的Spring-mvc.xml配置文件中添加开启AOP自动代理。

image.png

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值