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

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

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

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

總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解
這篇文章主要介紹了Java零基礎(chǔ)教程之Windows下安裝 JDK的方法圖解,本文介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下2016-09-09
SpringBoot中處理跨域資源的5種實(shí)現(xiàn)方法與對比
這篇文章主要為大家詳細(xì)介紹了SpringBoot中處理跨域資源的5種實(shí)現(xiàn)方法并進(jìn)行簡單對比,文中的示例代碼講解詳細(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,這些方法都能顯著簡化開發(fā)過程,需要的朋友可以參考下2024-12-12
SpringBoot中Controller參數(shù)與返回值的用法總結(jié)
這篇文章主要介紹了SpringBoot中Controller參數(shù)與返回值的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

