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