最近发现了 Dagger 这个编译时 DI 的宝藏项目,发现编译时确实有很多好处 但是 Dagger 并不支持 AOP ,于是对 Java 的编译时 AOP 实现进行了调研 发现如下
Micronaut IOC
https://docs.micronaut.io/latest/guide/index.html#ioc
貌似是通过字节码增强实现的
fastaop
https://github.com/fast-light/fastaop
通过 Lombok 的方式,Annotation Processor 阶段修改 AST 实现
还有其他的实现吗,欢迎补充
1
git00ll 2021-12-17 11:17:19 +08:00
java 编译时 aspectj
|
3
git00ll 2021-12-17 12:13:26 +08:00
根据配置的连接点,编译时修改原始的 class 文件,
将增强织入原始字节码中,生成增强后的字节码。 这样打成 jar 包后的 class 文件就是增强后的 class 文件了。 这个算是编译时 aop 吧 |
5
newaccount 2021-12-17 12:47:14 +08:00 1
AspectJ, 运行期织入( Load Time Weaving, LTW ),编译期织入( Compile Time Weaving, CTW )。以前用来模仿 Active Record 做充血模型的。但是那时候还没有 jenkins ,结果总有人发布的 class 不对,后来也就懒得用了。
|
6
dk7952638 OP @newaccount 我简单看了一下,AspectJ CTW 是通过 AspectJ 自己的编译器(或者是 eclipse 维护的编译器)来嵌入切面代码的,不知道我理解的对不对
|
7
newaccount 2021-12-17 17:30:22 +08:00
@dk7952638 是的。而且比起来在代码里面玩花活儿,还是写的让新人容易上手更实在。
|