因为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扫描配置的文件中(注意这里这样做是为了拦截控制器层)
<aop:aspectj-autoproxy proxy-target-class="true"/><!-- 启用AspectJ对Annotation的支持 -->
<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>