Java 程序员进来回答一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
purensong
V2EX    程序员

Java 程序员进来回答一下

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

    做 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     Solana     1476 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:41 PVG 00:41 LAX 09:41 JFK 12:41
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86