1. 程式人生 > >springAOP攔截controller層失效問題

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>