最近使用aop,想做一下service层的异常处理,使用的是注解的方式@Aspect
问题在于,我配置后,controller层的切面是正常的,在controller层我做了日志记录。但是在service层切面不执行。检查了很久都没有发现问题,切点与方法都正确,的确很让人郁闷。
检查了很久,意识到,为什么controller层可以用,service不能用呢?是不是配置出了问题?
问题在于我配置aop的位置
<aop:aspectj-autoproxy proxy-target-class="true"/>
配置文件中 对aop的配置,我放在了spring-mvc的配置文件中
在这个配置文件中,配置了注解包扫描,但是仅仅配置了controller层
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.bt.controller"/>
...省略...
<aop:aspectj-autoproxy proxy-target-class="true"/>
这里没有配置service扫描,service层的扫描配置在 spring-mybatis中,在这里aop扫描不到,aop仅扫描到当前配置文件的包扫描!
令人窒息
最后加上service层的扫描后,aop可以正常使用了
<context:component-scan base-package="com.bt.controller,com.bt.service"/>
...省略...
<aop:aspectj-autoproxy proxy-target-class="true"/>