springAOP攔截controller層失效問題
阿新 • • 發佈:2018-12-16
因為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>