aocache专用的 静态织入插件,通过引用自动包重定位技术实现 AspectJ 切面的无缝集成 。
✅ 智能包重定位
自动将 org.aspectj
重定向至 com.gitee.l0km.aocache.aspectj
,彻底解决依赖冲突
✅ 双模块架构
aocache/aocachez
:运行时库(内嵌 Shade 化 AspectJRT),aocachez
为零依赖,同时内嵌Guavaaocache-core
:静态织入专用切面库✅ 全自动化配置
无需手动声明切面库路径,自动配置 aocache-core
切面库
<dependency>
<groupId>com.gitee.l0km</groupId>
<artifactId>aocache</artifactId>
<version>0.5.0</version>
<scope>runtime</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>com.gitee.l0km</groupId>
<artifactId>aocache-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<goals><goal>compile</goal></goals>
<goals><goal>test-compile</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
wrapEnable
参数说明aocache-maven-plugin定义了一个额外的参数wrapEnable
用于控制ASM处理.class
文件的工作模式。
<configuration>
<wrapEnable>true/false</wrapEnable> <!-- 默认值为 false -->
</configuration>
模式 | 优点 | 缺点 |
---|---|---|
RELOCATE 模式 (wrapEnable=false ) |
- 消除运行时对原生 aspectjrt 的依赖- 不增加额外运行时性能开销 |
- 可能引发 AspectJ 版本冲突(如与其他切面库混用) - 重定位后无法动态升级 AspectJ 版本 |
WRAP 模式 (wrapEnable=true ) |
- 兼容其他 AspectJ 实现 - 允许动态升级 AspectJ 版本 |
- 需依赖原生 aspectjrt 库- 高频调用时存在对象包装性能损耗 |
RELOCATE 模式(推荐): 若项目为独立服务或中间件且无其他需要静态织入的切面库或切面定义依赖,简化依赖管理并提升性能。
<wrapEnable>false</wrapEnable>
WRAP 模式: 在混合织入场景下,如项目需整合 Spring AOP 等第三方切面库,或需灵活调整 AspectJ 版本。
<wrapEnable>true</wrapEnable>
基于ASM字节码改写技术,在aspectj-maven-plugin内核执行静态织入生成的class的基础上,进一步对class进行重定位修改。
org.aspectj
包路径重定向至com.gitee.l0km.aocache.aspectj
,确保被织入类对AspectJ的引用指向aocache库内嵌的Shade化组件,彻底消除与应用项目其他AspectJ依赖的冲突。
.class
文件中的类引用路径,将 org.aspectj.*
替换为 com.gitee.l0km.aocache.aspectj.*
。INVOKEVIRTUAL
指令)的位置对JoinPoint/ProceedingJoinPoint
类型参数插入 AspecjrtDecorator.wrap()
包装指令,在class运行时将原生 org.aspectj.lang.JoinPoint
转换为重定位类型(com.gitee.l0km.aocache.aspectj.lang.JoinPoint
)。
JoinPoint jp = AspecjrtDecorator.wrap(rawJp)
指令。aspectjrt
的引用,仅在运行时对aocache切面方法传递的JoinPoint/ProceedingJoinPoint
参数动态适配重定位类型。aspectjrt
依赖声明为compile
,仅在编译时提供AspectJ注解支持aspectjrt
组件,形成不依赖AspectJ结构。静态织入阶段通过aocache-core
生成增强字节码,运行时则无缝切换至aocache/aocachez
内嵌组件自动切面库发现
插件通过解析项目依赖树,自动增加com.gitee.l0km:aocache-core
切面库定义。相比原生aspectj-maven-plugin需手动配置<aspectLibrary>
的方式,本插件实现零配置织入。
编译时织入优化
基于改造后的aspectj-maven-plugin内核,在compile
阶段完成以下操作流程:
源代码编译 → 加载aocache-core切面 → 正常静态织入 → 包名重定位/插入WRAP指令 → 生成最终字节码
该流程确保织入后的类文件与aocache运行时库完全兼容
特性 | aspectj-maven-plugin | aocache-maven-plugin |
---|---|---|
包冲突解决方案 | 手动排除依赖 | 自动重定位包名 |
切面库配置 | 需显式声明 <aspectLibrary> |
零配置自动发现 |
运行时依赖 | 需单独引入 AspectJRT | 内嵌 Shade 化组件 |
除了
<aspectLibraries><aspectLibrary></aspectLibrary></aspectLibraries>
参数外, aocache-maven-plugin的其他配置参数与aspectj-maven-plugin保持一致
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。