首先,我在项目中使用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 中,这样的话启动,代理对象不生效;后面改了,就好了。记录一下(我也不知道原因,有知道的老铁麻烦评论留言,谢谢!) |