springAOP拦截controller层失效问题

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

同样这样的情况也存在于数据库事务中, 如果Service的Bean扫描配置在spring-mvc.xml中, 而数据库事务管理器配置在application.xml中, 会导致数据库事务失效, 原理一样.
所以这里 ,我们需要把AOP配置放置在Controller扫描配置的文件中,这里是spring-mvc.xml

(注意这里这样做是为了拦截控制器层)

<!-- 启用AspectJ对Annotation的支持 -->

<aop:aspectj-autoproxy proxy-target-class="true"/>

<!--切面类-->
<bean id="userInterceptor" class="cn.org.sso.www.logs.UserLogs"></bean>

<!--扫描器-->

 <context:component-scan base-package="cn.org.sso.www.controller" use-default-filters="true">
 </context:component-scan> 

猜你喜欢

转载自blog.csdn.net/qq_15652607/article/details/83180894