稀里糊涂的分不清这三个包的关系到底是什么,因此查了一下写篇总结。
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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐