美文网首页
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要在使用的过程中完成动态代理的创建

相关文章

  • Spring之使用注解配置Spring AOP

    Spring框架通过注解配置AOP是基于AspectJ实现的。 Spring框架只是直接使用了AspectJ的注解...

  • Spring_7_1 AOP 使用 XML 实现

    @AspectJ AspectJ 是一个面向切面的框架,它扩展了Java 语言。AspectJ 定义了AOP 语法...

  • 基于AspectJ的AOP开发

    AspectJ简介 AspectJ是一个基于Java语言的AOP框架 Spring2.0以后新增了对AspectJ...

  • AspectJ简介

    AspectJ简介 AspectJ是一个基于Java语言的AOP框架 Spring2.0以后新增了对AspectJ...

  • 切面思想之集中式登录架构设计

    如何利用切面的思想实现集中式登录?AspectJ AspectJ 介绍 AspectJ是一个面向切面编程的框架,它...

  • AspectJ 框架

    AspectJ 框架 提供了完整的 AOP 解决方案,是AOP的 Java实现版本 定义切面语法以及切面语法的解析...

  • Spring-7AspectJ使用

    AspectJ AspectJ:Java 社区里最完整最流行的 AOP 框架.在 Spring2.0 以上版本中,...

  • 29、Spring5之AOP操作-准备工作

    AOP操作(准备) 1、Spring框架一般都是基于AspectJ实现AOP操作。 什么是AspectJ Aspe...

  • AspectJ的AOP开发

    1.使用AspectJ 实现AOP • AspectJ是一个基于Java语言的AOP框架 • Spring2.0以...

  • spring AOP

    What is AspectJ? 说到AOP框架我们就不得不探讨一下AspectJ了,在Spring 开始支持AO...

网友评论

      本文标题:AspectJ 框架

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