因为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>