V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
purensong
V2EX  ›  程序员

Java 程序员进来回答一下

  •  
  •   purensong · 2020-03-13 18:24:09 +08:00 · 2963 次点击
    这是一个创建于 1701 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做 java 的一般都用过 lombok,而对 lombok 的原理想必知道的也清楚是通过 javac API 实现。我想知道还有什么类似的开源工具会用到 javac API,编译的时候去做的事,什么样的项目会有涉及,想深入学习一下。 至少我开发这些年还没深入研究过编译 ,语法解析,感觉挺神秘的。因为单靠一个注解就帮你在编译的时候塞进了很多代码。

    24 条回复    2020-03-17 18:27:33 +08:00
    zhuawadao
        1
    zhuawadao  
       2020-03-13 18:35:15 +08:00   ❤️ 1
    我寻思你这也都是陈述句啊。
    wysnylc
        2
    wysnylc  
       2020-03-13 18:39:01 +08:00
    抱歉,没用过 lombok
    luckylo
        3
    luckylo  
       2020-03-13 18:43:28 +08:00 via Android
    map struct 貌似是这么写的吧
    bbao
        4
    bbao  
       2020-03-13 18:44:47 +08:00
    抱歉,都没听过 lombok,不知道是啥
    guili618
        5
    guili618  
       2020-03-13 18:45:06 +08:00
    建议你看下这个帖子 https://www.iteye.com/topic/517796,你就明白大神是怎么干的了,
    这位哥们后来去了淘宝开发 TDDL,后来离职自己出来一个人写了个数据库
    luckylo
        6
    luckylo  
       2020-03-13 18:45:58 +08:00 via Android
    @luckylo 我貌似
    luckylo
        7
    luckylo  
       2020-03-13 18:46:07 +08:00 via Android
    @luckylo 弄错了
    Jooooooooo
        8
    Jooooooooo  
       2020-03-13 18:46:18 +08:00
    不如直接深入学习 java 虚拟机
    guili618
        9
    guili618  
       2020-03-13 18:46:30 +08:00
    https://www.iteye.com/topic/517796

    我佛了,V2 咋连编辑都不让……
    hdbzsgm
        10
    hdbzsgm  
       2020-03-13 18:49:47 +08:00
    有些人的 ide 可以自动生成 getter setter 什么的 lombok 没处用
    Cbdy
        11
    Cbdy  
       2020-03-13 18:52:34 +08:00 via Android
    举几个例子
    静态代码分析,如:findbugs、spotbugs
    编译期依赖注入,如:dagger
    代码生成工具,如:vertx-codegen
    shenlanAZ
        12
    shenlanAZ  
       2020-03-13 18:52:56 +08:00
    cglib 动态代理可以研究一下
    beidounanxizi
        13
    beidounanxizi  
       2020-03-13 19:02:31 +08:00
    这玩意 没啥好研究的 不得不说 反射 被某些脑残 Java 开发拿来作为技术现象很普遍一直是我最讨厌 Java 的点,
    chashao
        14
    chashao  
       2020-03-13 19:03:20 +08:00 via iPhone
    我 c#程序员进来看看
    guyeu
        15
    guyeu  
       2020-03-13 19:26:06 +08:00
    annotation processor 用得很广泛了,lombok 实际上也是 hack 了一些东西。。类似功能的还有 Autovalue 之类一大堆工具( java 程序员为了少写代码做了很多工作)。。

    仅仅是用到 javac 的 api 的话,阿里的 arthas 基本上算是个百科全书了。。
    find
        16
    find  
       2020-03-13 20:54:22 +08:00 via iPhone
    这个 是 JSR 269 规范里面 plugin annotate process api,我觉得楼主不适合做程序员,这么简单的事情 关键查找一下就知道了,需要在这里问?
    chendy
        17
    chendy  
       2020-03-13 22:41:13 +08:00
    直接搜 annotation processor 就是了
    fantastM
        18
    fantastM  
       2020-03-14 10:26:18 +08:00
    purensong
        19
    purensong  
    OP
       2020-03-16 09:35:39 +08:00
    @find 嗯嗯,多谢提醒,我有点不爱看文献,想过来和 v 友聊几句,没想到秀智商了。。
    purensong
        20
    purensong  
    OP
       2020-03-16 09:38:17 +08:00
    @zhuawadao 不是啊,我第二句不是问 我想知道...,我表达的不够好吧,其实就是过来问问大家有没有类似的开源代码可以学习,发散一下自己的思维,忘了提阿里的阿尔萨斯,罪过罪过。
    purensong
        21
    purensong  
    OP
       2020-03-16 09:43:50 +08:00
    @beidounanxizi 这个好像不是反射吧
    purensong
        22
    purensong  
    OP
       2020-03-16 09:45:01 +08:00
    @hdbzsgm 是的,程序员虽然工作只要会用就行,但是有时还是好奇它是怎么做的,有没有类似的场景思路,以后遇到问题多一条路选择也是好的
    beidounanxizi
        23
    beidounanxizi  
       2020-03-17 17:28:14 +08:00
    @purensong annotation processor 楼上说了 这个东西嘛 刚开始还有点好奇 其实就是那么回事啊 注解么 还能有啥
    Chinsung
        24
    Chinsung  
       2020-03-17 18:27:33 +08:00   ❤️ 1
    这个东西凑巧研究过,lombok 本质上还是 annotation processor,只不过他本身封装的比较有水平,对相关 api 也有一定具有深度的探索,把原生提供的语法树节点封装成了自己的一套。不过 lombok 对语法树的很多操作比较有借鉴性,查文档不如看源码。
    至于类似的原理,主要看下 META-INF 里的 javax.annotation.processing.Processor,有这个的都是带这个原理的。
    主要还是切面和代理的框架使用的多,比如切面框架,dubbo。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:11 · PVG 03:11 · LAX 11:11 · JFK 14:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.