V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dk7952638
V2EX  ›  问与答

Java 编译时 AOP 实现

  •  
  •   dk7952638 · 348 天前 · 1334 次点击
    这是一个创建于 348 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近发现了 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 条附言  ·  348 天前
    Aspectj Compile-Time Weaving
    https://www.eclipse.org/aspectj/doc/next/devguide/ajc-ref.html
    原理是使用 Aspectj 自己的编译器进行编织

    栈溢出上一个不错的 compile-tiome aop 的回答
    https://stackoverflow.com/questions/39448543/run-time-aop-vs-compile-time-aop/39556178
    7 条回复    2021-12-17 17:30:22 +08:00
    git00ll
        1
    git00ll  
       348 天前
    java 编译时 aspectj
    dk7952638
        2
    dk7952638  
    OP
       348 天前
    @git00ll 请问能具体讲讲吗,aspectj 还有编译时的吗?
    git00ll
        3
    git00ll  
       348 天前
    根据配置的连接点,编译时修改原始的 class 文件,
    将增强织入原始字节码中,生成增强后的字节码。
    这样打成 jar 包后的 class 文件就是增强后的 class 文件了。

    这个算是编译时 aop 吧
    dk7952638
        4
    dk7952638  
    OP
       348 天前
    @git00ll 谢谢,明白了,应该是和 Micronaut 一样的方式
    newaccount
        5
    newaccount  
       348 天前   ❤️ 1
    AspectJ, 运行期织入( Load Time Weaving, LTW ),编译期织入( Compile Time Weaving, CTW )。以前用来模仿 Active Record 做充血模型的。但是那时候还没有 jenkins ,结果总有人发布的 class 不对,后来也就懒得用了。
    dk7952638
        6
    dk7952638  
    OP
       348 天前
    @newaccount 我简单看了一下,AspectJ CTW 是通过 AspectJ 自己的编译器(或者是 eclipse 维护的编译器)来嵌入切面代码的,不知道我理解的对不对
    newaccount
        7
    newaccount  
       348 天前
    @dk7952638 是的。而且比起来在代码里面玩花活儿,还是写的让新人容易上手更实在。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3474 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:54 · PVG 20:54 · LAX 04:54 · JFK 07:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.