關(guān)于@Data和@Builder注解解析
@Data和@Builder注解解析
@Data 和 @Builder是使用 lombok過程中常用的兩個(gè)注解
- @Data:將一個(gè)普通類變成JavaBean,并自動(dòng)生成相應(yīng)屬性的 Getter,Setter等方法
- @Builder:用構(gòu)造者模式,通過鏈?zhǔn)椒椒◣椭覀兩蓪?duì)象
存在問題
@Data 和 @Builder這兩個(gè)注解混合使用,會(huì)編譯失敗。
解決方案一
通過添加@NoArgsConstructor 和 @AllArgsConstructor 這兩個(gè)注解。
這種方式會(huì)通過@AllArgsConstructor生成一個(gè)訪問級(jí)別為 public 的全參構(gòu)造器。
@Builder可以用生成的全參構(gòu)造器來構(gòu)造對(duì)象,不再與@Data所包含的@RequiredArgsConstructor發(fā)生沖突。

解決方案二
通過自己重寫無參構(gòu)造器,并添加@Tolerate注解。
重寫的無參構(gòu)造器可以幫助我們解決@Data與 @Builder 注解的沖突。

原因分析
@Data為一個(gè) Java類賦予了 JavaBean 的全部功能.實(shí)現(xiàn)了Getter,Setter,構(gòu)造器,toString等。
在為一個(gè) JavaBean 在增加 @Data注解后,可以使用set方法設(shè)置對(duì)象屬性并且使用get方法讀取屬性。
@Builder 構(gòu)造者模式的初衷是構(gòu)建并產(chǎn)出復(fù)雜產(chǎn)品,在配置好屬性后產(chǎn)出的結(jié)果是一個(gè)產(chǎn)品,此時(shí)對(duì)于開發(fā)者而言更加注重的是使用產(chǎn)品的功能而非獲取產(chǎn)品內(nèi)部的構(gòu)造,與 JavaBean的區(qū)別在于在獲取產(chǎn)品后是無法再對(duì)產(chǎn)品設(shè)置屬性,讀取屬性。
而 @Builder 會(huì)為類創(chuàng)建一個(gè)構(gòu)造內(nèi)部類,通過該類可以構(gòu)造產(chǎn)品。
該種情形下,開發(fā)者不應(yīng)該通過 new創(chuàng)建對(duì)象而是統(tǒng)一通過構(gòu)造類創(chuàng)建對(duì)象,@Builder 獲取到的對(duì)象也沒有set和get功能。

@Builder與@Data一起使用的效果
首先@Data注解標(biāo)記了我們最終的產(chǎn)出注定是一個(gè)JavaBean,而JavaBean 中的屬性是可以設(shè)置的,構(gòu)造器模式的使用可以幫助我們通過鏈?zhǔn)秸{(diào)用的方式快速構(gòu)建 JavaBean,以往我們需要通過多行set方法實(shí)現(xiàn)的 JavaBean在構(gòu)造器模式下只需要一行即可完成.

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解
這篇文章主要介紹了Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
SpringBoot中處理跨域資源的5種實(shí)現(xiàn)方法與對(duì)比
這篇文章主要為大家詳細(xì)介紹了SpringBoot中處理跨域資源的5種實(shí)現(xiàn)方法并進(jìn)行簡(jiǎn)單對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
Java?json轉(zhuǎn)換實(shí)體類(JavaBean)及實(shí)體類(JavaBean)轉(zhuǎn)換json代碼示例
這篇文章主要介紹了兩種常見的JSON與Java實(shí)體類相互轉(zhuǎn)換的方法,分別是使用庫Jackson、Gson、Fastjson和在線工具,無論是將JSON轉(zhuǎn)換為Java實(shí)體類還是將Java實(shí)體類轉(zhuǎn)換為JSON,這些方法都能顯著簡(jiǎn)化開發(fā)過程,需要的朋友可以參考下2024-12-12
SpringBoot中Controller參數(shù)與返回值的用法總結(jié)
這篇文章主要介紹了SpringBoot中Controller參數(shù)與返回值的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

