spring6源码阅读(六):@AspectJ和spring-aop
@AspectJ和spring-aop
1,外观样式: spring-aop本身的api自不必说,额外的还提供了对@AspectJ注解风格的支持
2,功能: spring-aop本身仅支持方法级别的代理,
Spring AOP目前仅支持方法执行连接点(对Spring bean上方法的执行进行建议)。尚未实现字段拦截,尽管可以添加对字段拦截的支持,而不会破坏核心Spring AOP API。如果你需要对字段访问和更新连接点进行建议,请考虑使用如AspectJ之类的语言。
额外:
1,@AspectJ是一个完整的aop解决方案,他是编译时作用的,也就是将java代码转为相应的字节码。而spring-aop是一个运行时作用解决方案,内核走的是cglib或者jdk。
那么AspectJ何时使用spring aop,何时使用自己的解决方案呢?
我理解的是AspectJ在spring的适配下,默认走的是spring-aop,但如果完整启用AspectJ要求的配置,就会执行编译时加载代理配置
- 编译期织入(CTW):使用 ajc(例如 aspectj-maven-plugin)编译。
- 加载期织入(LTW):JVM 启动添加 -javaagent:/path/aspectjweaver.jar,并启用加载期织入配置。
ps: 我并没有实际的使用过@AspectJ的完整功能,这些知识仅仅是我通过查资料找到的。