轉自http://usherlight.iteye.com/blog/1306111
正確配置spring aop,在controller中使用AOP
在controller中使用AOP的問題主要在於如何讓controller能夠被檢測到。
controller和其他spring bean的區別在於:controller是由mvc定義並在web.xml中的dispatcher中定義的。
解決方法:
1、正確定義controller,(比較通用的做法,沒有特殊情況的話,大部分應用沒有這個問題)
a. 將服務層的類都放在ApplicationCotext-*.xml中定義,在context listener中初始化(注意,任何controller都不應該在這里出現),要包括<aop:aspectj-autoproxy/>, 在這里,有沒有proxy-target-class="true" 沒有關系(具體含義參看下文)
b. 定義mvc的配置文件,一般是 <<servlet name>>-servlet.xml,一般(也是推薦做法)使用auto scan來定義所有的controller.關鍵步驟來了:這個文件也要加入<aop:aspectj-autoproxy proxy-target-class="true"/>, 一定要添加proxy-target-class="true"! 這是用於通知spring使用cglib而不是jdk的來生成代理方法。
c. 另外一個事項,controller需要使用@controller注釋,而不是繼承abstract controller。
d. 建議使用aspectj來完成aop
