Spring AOP、AspectJ、CGLIB

 

静态代理和动态代理

AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。 一般来说,编译时增强的 AOP 框架在性能上更有优势,因为运行时动态增强的 AOP 框架需要每次运行时都进行动态增强。

 

AspectJ

AspectJ是一套独立的面向切面编程的解决方案,AspectJ 在编译时“自动”编译得到了一个新类,这个新类增强了原有的类的功能,因此 AspectJ 是编译时增强的 AOP 框架。

 

AspectJ与SpringAoP

曾经以为AspectJ是Spring AOP一部分,是因为Spring AOP使用了AspectJ的Annotation。使用了Aspect来定义切面,使用Pointcut来定义切入点,使用Advice来定义增强处理。虽然使用了Aspect的Annotation,但是并没有使用它的编译器和织入器。

 

CGLIB

CGLIB(Code Generation Library)它是一个代码生成类库。它可以在运行时候动态时生成某个类的子类。 CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM(Java字节码操控框架),来转换字节码并生成新的类。 代理模式为要访问的目标对象提供了一种途径,当访问对象时,它引入了一个间接的层。

 

 

 

https://blog.csdn.net/chinaherolts2008/article/details/120098676

posted @ 2023-03-27 14:31  大枇杷  阅读(110)  评论(0编辑  收藏  举报