当前位置:网站首页>Lombok principle and the pit of ⽤ @data and @builder at the same time
Lombok principle and the pit of ⽤ @data and @builder at the same time
2022-07-06 04:12:00 【Hollis Chuang】
source :https://juejin.cn/post/7103011031672176677
The problem background
Lombok send ⽤ At the same time make ⽤@Data and @Builder , An error is reported when constructing a parameterless constructor ! Compile not pass . Here's the picture :
Lombok @Data and @Builder Analyze usage separately
Lombok send ⽤@Data Sure ⽣ become ⽆ Participate in constructing classes ⾥⾯ All attributes of getter/setter⽅ Law . It can simplify the development of our code .( Need to install Lombok Plug ins and leads ⼊Lombok rely on ).
For example, next ⾯ Of ⼀ Entity classes , lead ⼊Lombok after , Sure ⾃ dynamic ⽣ become GET/SET⽅ Law and ⽆ Parameter constructor .
The compiled class by : You can see that it not only helps us generate get and set , There is also a default parameterless constructor
So how to automatically generate a parameter constructor ? Use @Builder annotation , Will help us ⽣ Complete the construction of attributes ⽅ Law .
The compiled class by : You can see It has helped us build a full attribute constructor , But if the value only references @Builder Annotations cannot be generated get and set Of .
But if at the same time ⽤@Data and @Builder Words , It can be seen that although ⽣ a GET/SET⽅ Law , however ⽆ Reference structure ⽅ There is no law , This is obviously unacceptable , Because many frameworks can be adjusted ⽤⽆ Reference structure to create objects .
The compiled class:
We try to be in Tet1 class ,⼿ Dynamic add ⽆ Reference structure ⽅ Law . The compiler finds that an error is reported and fails :
resolvent
Method 1
Lombok At the same time make ⽤@Data and @Builder When , If you want to ⽣ become ⽆ Reference structure , Need to be in code ⾥⾯⼿ Dynamic leading ⼊ annotation @Tolerate, Give Way Lombok stay ⽣ When you are in a class , Not aware of the specified constructor .
Method 2
Use the parameterless constructor directly + There is a way of involving constructors ,@RequiredArgsConstructor To build a reference ,@NoArgsConstructor To build a parameterless constructor , As shown in the figure :
The effect after compiling :
Lombok principle
Java The compilation of is divided into the following ⼏ Stages :
Parsing and filling symbol tables -> Annotation Processing -> Analysis and bytecode ⽣ become ->⽣ become ⼆ Base number class⽂ Pieces of .
Lombok send ⽤ Yes. JDK 6 Realized JSR 269: Pluggable Annotation Processing API ( Compile time annotation processor ), It is in compile time to put Lombok The annotation code for , Convert to regular Java ⽅ Law ⽽ Implementation note ⼊.
At compile time , When Java Source code is abstract idiom tree (AST) after ,Lombok Will be based on ⾃⼰ The annotation processor dynamically modifies AST, Add new code ( node ), Here ⼀ Cut hold ⾏ after , And then through the analysis ⽣ It becomes the final bytecode (.class) ⽂ Pieces of , This is it. Lombok The hold of ⾏ principle .
It can be implemented with the help of annotation processor ⼀ A simple one. Setter, Our implementation steps are :
⾃ Definition ⼀ An annotation tag is attached to ⼝, And implement ⼀ individual ⾃ Defined annotation handler ;
benefit ⽤ tools.jar Of javac api Handle AST ( Abstract syntax tree )3. send ⽤⾃ The defined annotation handler compiles the code .
1. Definition ⾃ Define annotations and annotation handlers
⾸ First create ⼀ individual MySetter.java ⾃ Definition ⼀ A note , The code is as follows :
Re realization ⼀ individual ⾃ Defined annotation handler , The code is as follows :
The test class is as follows :
2. To the annotation processor ⾏ compile , Subsequently make ⽤ The annotation processor advances the class ⾏ compile
⾸ The annotation processor needs to be modified first ⾏ compile (javac -cp ⽤ Yu Yin ⼊ Third ⽅jar Baojin ⾏ compile )
Then make ⽤ Annotation processor for this Person Test class into ⾏ compile :
Let's look at it later ⽣ Yes Person.class, You can find Setter⽅ The law has ⽣ a :
summary
Of course, although the test class has ⽣ become Setter⽅ Law , But because it is at compile time ⽣ Yes , Therefore, we can't directly adjust when we are developing ⽤Setter⽅ French , therefore Lombok Provides plug-in mechanism ,⽅ So we can directly adjust it during development ⽤Lombok Characteristics of .
End
Previous recommendation
How to build a technical team that will bring down the company ?
Performance of major mainstream programming languages PK, The results were unexpected
For amount calculation BigDecimal It's safe ? Look at these five pits ~~
There is Tao without skill , It can be done with skill ; No way with skill , Stop at surgery
Welcome to pay attention Java Road official account
Good article , I was watching ️
边栏推荐
- MySQL learning record 13 database connection pool, pooling technology, DBCP, c3p0
- Script lifecycle
- C (XXIX) C listbox CheckedListBox Imagelist
- [FPGA tutorial case 12] design and implementation of complex multiplier based on vivado core
- /usr/bin/gzip: 1: ELF: not found/usr/bin/gzip: 3: : not found/usr/bin/gzip: 4: Syntax error:
- [FPGA tutorial case 11] design and implementation of divider based on vivado core
- 20、 EEPROM memory (AT24C02) (similar to AD)
- 关于进程、线程、协程、同步、异步、阻塞、非阻塞、并发、并行、串行的理解
- MySql数据库root账户无法远程登陆解决办法
- math_ Derivative function derivation of limit & differential & derivative & derivative / logarithmic function (derivative definition limit method) / derivative formula derivation of exponential functi
猜你喜欢
About some basic DP -- those things about coins (the basic introduction of DP)
Yyds dry goods inventory web components series (VII) -- life cycle of custom components
Deep learning framework installation (tensorflow & pytorch & paddlepaddle)
Solution of storage bar code management system in food industry
C (thirty) C combobox listview TreeView
DM8 archive log file manual switching
What is the difference between gateway address and IP address in tcp/ip protocol?
Record the pit of NETCORE's memory surge
记一次excel XXE漏洞
自动化测试的好处
随机推荐
Practical development of member management applet 06 introduction to life cycle function and user-defined method
Comprehensive ability evaluation system
Hashcode and equals
ESP32_ FreeRTOS_ Arduino_ 1_ Create task
About some basic DP -- those things about coins (the basic introduction of DP)
pd. to_ numeric
Développement d'un module d'élimination des bavardages à clé basé sur la FPGA
2/13 qaq~~ greed + binary prefix sum + number theory (find the greatest common factor of multiple numbers)
Proof of Stirling formula
关于进程、线程、协程、同步、异步、阻塞、非阻塞、并发、并行、串行的理解
1291_Xshell日志中增加时间戳的功能
DM8 archive log file manual switching
Fundamentals of SQL database operation
Benefits of automated testing
C mouse event and keyboard event of C (XXVIII)
10 exemples les plus courants de gestion du trafic istio, que savez - vous?
Thread sleep, thread sleep application scenarios
math_ Derivative function derivation of limit & differential & derivative & derivative / logarithmic function (derivative definition limit method) / derivative formula derivation of exponential functi
Yyds dry goods inventory web components series (VII) -- life cycle of custom components
MySQL master-slave replication