AspectJ 框架
2020-07-18 本文已影响0人
码而优则仕
AspectJ 框架
提供了完整的 AOP 解决方案,是AOP的 Java实现版本
-
定义切面语法以及切面语法的解析机制
-
提供了强大的织入工具
AspectJ包含三个 jar 包:
-
aspectjrt.jar 提供 AOP相关的注解 如: @Aspect @Before 等注解信息
-
aspectjtools.jar :提供 ajc 编译器
-
aspectjweaver.jar:对切入点表达式的支持,i提供对切面语法的支持,里面还包含 java agent(用于在类加载期间去织入切面—即LTW时织入逻辑) 该 jar 包其实包含了 aspectjrt.jar 的内容
AspectJ 框架的织入时机:静态织入和LTW(Load Time Weaving)
-
编译时织入:利用 ajc编译器(不是 javac 编译器),将切面逻辑织入到类里生成 class 文件(将 java源文件编译成class文件,并将切面逻辑织入进代码里面—意味着我们可以脱离 javac指令,直接使用 ajc指令将横切逻辑织入进 java文件里面,生成一个具备横切逻辑的 class文件)
-
编译后织入:利用 ajc编译器,修改 javac 编译器 编译出来的 class文件(ajc解析 javac 编译后生成的 class文件,将横切逻辑织入其中)
-
类加载期织入:利用 java agent,在类加载的时候织入切面逻辑(不需要对 class文件进行处理,所以是不需要 ajc 编译器的,而是直接利用 java agent代理,在 ClassLoader 加载 Class 对象的时候 将切面织入到代码里面)