做 java 的一般都用过 lombok,而对 lombok 的原理想必知道的也清楚是通过 javac API 实现。我想知道还有什么类似的开源工具会用到 javac API,编译的时候去做的事,什么样的项目会有涉及,想深入学习一下。 至少我开发这些年还没深入研究过编译 ,语法解析,感觉挺神秘的。因为单靠一个注解就帮你在编译的时候塞进了很多代码。
做 java 的一般都用过 lombok,而对 lombok 的原理想必知道的也清楚是通过 javac API 实现。我想知道还有什么类似的开源工具会用到 javac API,编译的时候去做的事,什么样的项目会有涉及,想深入学习一下。 至少我开发这些年还没深入研究过编译 ,语法解析,感觉挺神秘的。因为单靠一个注解就帮你在编译的时候塞进了很多代码。
|
1
我寻思你这也都是陈述句啊。
|
|
wysnylcMar 13, 2020
2
抱歉,没用过 lombok
|
|
luckyloMar 13, 2020 via Android
3
map struct 貌似是这么写的吧
|
|
bbaoMar 13, 2020
4
抱歉,都没听过 lombok,不知道是啥
|
|
guili618Mar 13, 2020
5
建议你看下这个帖子 https://www.iteye.com/topic/517796,你就明白大神是怎么干的了,
这位哥们后来去了淘宝开发 TDDL,后来离职自己出来一个人写了个数据库 |
|
JoooooooooMar 13, 2020
8
不如直接深入学习 java 虚拟机
|
|
guili618Mar 13, 2020
9
|
|
hdbzsgmMar 13, 2020
10
有些人的 ide 可以自动生成 getter setter 什么的 lombok 没处用
|
|
CbdyMar 13, 2020 via Android
11
举几个例子
静态代码分析,如:findbugs、spotbugs 编译期依赖注入,如:dagger 代码生成工具,如:vertx-codegen |
|
WayneCmdMar 13, 2020
12
cglib 动态代理可以研究一下
|
|
beidounanxiziMar 13, 2020
13
这玩意 没啥好研究的 不得不说 反射 被某些脑残 Java 开发拿来作为技术现象很普遍一直是我最讨厌 Java 的点,
|
|
chashaoMar 13, 2020 via iPhone
14
我 c#程序员进来看看
|
|
guyeuMar 13, 2020
15
annotation processor 用得很广泛了,lombok 实际上也是 hack 了一些东西。。类似功能的还有 Autovalue 之类一大堆工具( java 程序员为了少写代码做了很多工作)。。
仅仅是用到 javac 的 api 的话,阿里的 arthas 基本上算是个百科全书了。。 |
|
findMar 13, 2020 via iPhone
16
这个 是 JSR 269 规范里面 plugin annotate process api,我觉得楼主不适合做程序员,这么简单的事情 关键查找一下就知道了,需要在这里问?
|
|
chendyMar 13, 2020
17
直接搜 annotation processor 就是了
|
|
fantastMMar 14, 2020
18
可以了解一下 Google auto 库例的 @AutoService 注解实现,实现类是这个 https://github.com/google/auto/blob/master/service/processor/src/main/java/com/google/auto/service/processor/AutoServiceProcessor.java
|
|
20
@zhuawadao 不是啊,我第二句不是问 我想知道...,我表达的不够好吧,其实就是过来问问大家有没有类似的开源代码可以学习,发散一下自己的思维,忘了提阿里的阿尔萨斯,罪过罪过。
|
|
21
@beidounanxizi 这个好像不是反射吧
|
|
beidounanxiziMar 17, 2020
23
@purensong annotation processor 楼上说了 这个东西嘛 刚开始还有点好奇 其实就是那么回事啊 注解么 还能有啥
|
|
24
这个东西凑巧研究过,lombok 本质上还是 annotation processor,只不过他本身封装的比较有水平,对相关 api 也有一定具有深度的探索,把原生提供的语法树节点封装成了自己的一套。不过 lombok 对语法树的很多操作比较有借鉴性,查文档不如看源码。
至于类似的原理,主要看下 META-INF 里的 javax.annotation.processing.Processor,有这个的都是带这个原理的。 主要还是切面和代理的框架使用的多,比如切面框架,dubbo。 |