spring之aspects包、aop包和aspectj包的简单梳理
稀里糊涂的分不清这三个包的关系到底是什么,因此查了一下写篇总结。1、aop包本身具有完整的AOP实现,但是只会使用Cglib或者JDK动态代理,在类加载时通过动态代理织入(补充一句:spring容器会在创建被代理bean时会自动创建代理bean),其使用了aspectj的部分功能2、aspectj提供了非常完善的AOP能力,可以编译时织入、编译后织入、加载时织入,几乎能在java class的任何
·
稀里糊涂的分不清这三个包的关系到底是什么,因此查了一下写篇总结。
1、aop包本身具有完整的AOP实现,但是只会使用Cglib或者JDK动态代理,在类加载时通过动态代理织入(补充一句:spring容器会在创建被代理bean时会自动创建代理bean),其使用了aspectj的部分功能
2、aspectj提供了非常完善的AOP能力,可以编译时织入、编译后织入、加载时织入,几乎能在java class的任何时刻使用织入功能;
因此可以说aspectj包是对aop包的aop功能进行支持;
spring3.0以前实现aop需要3个包:
- aopalliance-1.0.0.jar
- aspectj.weaver-xx.RELEASE.jar
- spring-aop-xx.jar
spring4.0以后aopalliance并入spring-aop包,实现aop只需要2个包: - aspectj.weaver-xx.RELEASE.jar
- spring-aop-xx.jar
SpingAOP具有一定面向切面具体实现,但在功能上弱于AspectJ,AspectJ结合aop包,则可以在IOC中使用完整的AOP功能(仅仅AspectJ是没有IOC的功能的),而Spring也提供了对AspectJ的扩展Spring-aspects.jar和 Spring-instrument.jar
参考链接:https://www.jianshu.com/p/a1950bbae852
更多推荐
已为社区贡献1条内容
所有评论(0)