首先,我在項目中使用aop是打算記錄用戶操作日志的:登錄、登出、修改密碼等;
思路就是在controller方法上增加自定義注解,然后在切面類中增加切點Pointcut(@annotation(自定義的注解)),然后在進方法前把用戶信息記錄好,用的是@Before()
因為是用注解,所以配置方面比較簡單,如下:
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:component-scan base-package="com.test.aspect" />
然后將注解添加在需要記錄的方法上面
這里說一下,如果需要拿到注解里面的值,可以通過對切面方法進行入參,例如:注解為@Log ,切面方法入參寫法為public void recordLog(Log log) ,
@Before(@annotation(log)),也就是方法的入參名,與注解名首字母小寫一致。
其他的就不多說,這里說一下踩得大坑!!!
一切准備就緒,啟動項目,按道理是要先進@Before修飾的方法的,但是每一次都直接跳到切點方法去了,在網上也看了很多文章,不行;問同事,同事還拿他的demo給我看了,一樣的,但也不知道為啥
我的不行;就這么搞了一天;
后面還是在網上看到的,真的找了好久:原因是我把
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:component-scan base-package="com.test.aspect" /> 這里的配置配到了spring的配置文件applicationContext.xml中了,而不是在springMVC的配置文件springmvc-servlet.xml
中,這樣的話啟動,代理對象不生效;后面改了,就好了。記錄一下(我也不知道原因,有知道的老鐵麻煩評論留言,謝謝!)