切面类(@Aspect)首先必须是bean

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

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

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

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

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

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

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


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

你可能感兴趣的:(spring学习笔记,问题记录)