AspectJ与CGLIB

AspectJ

AspectJ是eclipse基金会的一个项目 Apache Aspectj,最后一个字母J就是Java的意思

  • a seamless aspect-oriented extension to the Java programming language
  • Java platform compatible

其相关jar包可在 aspectj下载,下载需要把 aspectj-x.x.x.jar 下载后解压,解压后 

在aspectj-x.x.x 的 lib下面会有3个文件

 AspectJ相关jar包说明

  • aspectjrt.jar包主要是提供 运行时的一些注解,静态方法等等东西,通常我们要使用aspectJ的时候都要使用这个包。
  • aspectjtools.jar包主要是提供赫赫有名的 ajc编译器,可以在编译期将java文件或者class文件或者aspect文件定义的切面织入到业务代码中。通常这个东西可以用在ant和maven中定义任务,或者IDE调用。
  • aspectjweaverjar包主要是提供了一个java agent用于在 类加载期间织入切面(Load time weaving即LTW)。并且提供了对切面语法的相关处理等基础方法,供ajc使用或者供第三方开发使用。

 AspectJ提供了3中方式的代理实现方案

  1. 编译时织入
    利用ajc编译器替代javac编译器,直接将源文件(java或者aspect文件)编译成class文件并将切面织入进代码。
  2. 编译后织入
    利用ajc编译器向javac编译期编译后的class文件或jar文件织入切面代码。
  3. 加载时织入
    不使用ajc编译器,利用aspectjweaver.jar工具,使用java agent代理在类加载期将切面织入进代码。

Spring的JDK动态代理、CGLIB子类代理

这两种方式是在运行时借助

1:JDK 动态代理

2:CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。

运行时增强,与上面aspectj的3种aop实现方式时机都不一样;

Spring aop与Aspectj的关系

1、前者动态代理最终是用的JDK Proxy api或者CGLIB来实现的

2、只是Spring支持了Aspect的注解标签(估计是为了让用户顺滑切换到Aspectj框架),没有依赖原生的aspect编译器;

网上另一个说法

AspectJ是AOP的祖宗,Spring的注解版参考了AspectJ的实现。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值