美文网首页
AspectJ 框架

AspectJ 框架

作者: 码而优则仕 | 来源:发表于2020-07-18 21:23 被阅读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 对象的时候 将切面织入到代码里面)

    前两种方式就是所谓的静态织入(class文件生成之后,相关的逻辑已经处理好了,相当于横切逻辑写死进代码里面),最后一种方式就是LTW织入(动态织入—类替换是在 JVM 利用 ClassLoader 加载类的时候完成的—也就是修改了类的字节码)
    CGLIB 和JDK 动态代理是依靠继承关系来生成类对应的动态代理对象---即最终会多出一个动态代理类
    Aspect 的执行效率会比Spring AOP要高—Aspect的类在使用前已经准备好了,而Spring AOP要在使用的过程中完成动态代理的创建

    相关文章

      网友评论

          本文标题:AspectJ 框架

          本文链接:https://www.haomeiwen.com/subject/ggafkktx.html