<Spring-Aspect> 切面类(@Aspect)首先必须是bean

1. 问题描述
今天发现老工程里有个日志切面但是总是也没有执行过。

2. 问题解决
1)怀疑是execution表达式问题,先后改动了AspectJ表达式也不生效。

2)在idea里打断点调试,tomcat启动后发现 断点红圈没有打勾(这种情况就表示代码永远不会走进来)。

最后一看,这个被标注了@Aspect的切面类根本就不是spring管理的bean。加上了@Component一切正常。

3. 总结
问题虽然很简单,但里面还是有几个知识点的:
1) spring2.5之后AOP已经全面被@Aspect等注解取代了,写起来很简便。

2)@AspectJ风格的切面可以通过@Compenent注解标识其为Spring管理Bean,也可以在xml里配置bean,无论哪种必须配置为bean。@Aspect注解 不能被Spring 自动识别并注册为Bean
<aop:aspectj-autoproxy/>用于开启Spring对@AspectJ风格切面的支持,但不能自动识别为bean,即使开启了 <context:component-scan>。

另外,spring允许abstract class里通过@Resource或@Autowired注入bean, 而abstract class本身不必是bean,也不可能是bean。


另外关于Aspect可以参考:
1.通用知识点: http://jinnianshilongnian.iteye.com/blog/1415606
2.Around和AfterThrowing不兼容 http://tianya23.blog.51cto.com/1081650/565034

猜你喜欢

转载自zoroeye.iteye.com/blog/2228740
今日推荐