AspectJ 是一个强大的 Java 编程语言扩展,它引入了面向切面编程(AOP)的概念,使得开发者能够更方便地处理系统中的横切关注点,如日志、事务管理、性能监控等。这两个 JAR 文件,`aspectjrt-1.8.7.jar` 和 `aspectjweaver-1.8.7.jar`,是 AspectJ 库的关键组成部分,主要用于在运行时支持 AOP 功能。
`aspectjrt-1.8.7.jar`:
AspectJ 运行时库(Runtime Library)是 AspectJ 的基础组件,提供了在 Java 应用程序中执行切面所需的基本设施。这个 JAR 文件包含以下主要功能:
1. **编译器接口**:允许 AspectJ 与标准 Java 编译器交互,如 javac 或 Eclipse 编译器,以生成包含切面代码的类文件。
2. **类装载器**:AspectJ 运行时提供了一个自定义的类装载器,能够识别并处理被织入切面的类,确保在运行时能够正确地应用切面。
3. **织入机制**:AspectJ 运行时库包含了在运行时织入切面的能力,即使对于没有经过 AspectJ 编译器处理的类,也可以通过 LTW(Load-Time Weaving)动态地进行织入。
4. **API**:提供了与切面交互的 API,例如,可以使用 `org.aspectj.lang.annotation.Aspect` 注解来声明一个切面,使用 `@Before`、`@After`、`@Around` 等注解定义通知(advice)。
`aspectjweaver-1.8.7.jar`:
AspectJ Weaver 是 AspectJ 的核心模块,负责实际的切面织入工作。它的主要职责包括:
1. **编译时织入(CTW, Compile-Time Weaving)**:在编译阶段,AspectJ Weaver 可以与 Java 编译器集成,将切面代码与目标类合并,生成新的字节码。这通常通过 ajc 编译器实现。
2. **加载时织入(LTW, Load-Time Weaving)**:在类装载到 JVM 时,AspectJ Weaver 监听并处理类装载事件,动态地修改类的字节码以织入切面。这需要 `aspectjrt-1.8.7.jar` 中的类装载器支持。
3. **编译器和字节码库**:AspectJ Weaver 包含了对 Java 字节码的操作和分析工具,能够理解并修改 Java 类的结构,以实现切面的织入。
4. **性能优化**:Weaver 在织入过程中会考虑性能影响,尽可能地减少对应用程序性能的影响。
在实际项目中,根据需求和配置,可以选择使用 CTW 或 LTW,甚至在某些情况下使用应用服务器或容器的类装载器支持的服务器端织入(SATW, Server-side AspectJ Weaving)。AspectJ 的这些特性使得开发者可以更专注于业务逻辑,而将横切关注点分离出来,提高代码的可维护性和复用性。
总结起来,`aspectjrt-1.8.7.jar` 和 `aspectjweaver-1.8.7.jar` 是实现 AspectJ 面向切面编程的关键组件,它们提供了从编译到运行时的全套支持,帮助开发者有效地管理和实现系统的横切关注点。在使用这两个库时,需要了解它们的工作原理,并结合具体的项目需求进行配置,以充分利用 AOP 的优势。
1