Java中@RequiredArgsConstructor使用詳解
一、什么是@RequiredArgsConstructor?
@RequiredArgsConstructor是Lombok的一個注解,簡化了我們對@Autowired書寫,我們在寫Controller層或者Service層的時候,總是需要注入很多mapper接口或者service接口,如果每個接口都寫上@Autowired,這樣看起來就會很繁瑣,@RequiredArgsConstructor注解可以代替@Autowired注解
二、@RequiredArgsConstructor怎么使用?
2.1、導(dǎo)包
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> </dependency>
2.2、使用
將@RequiredArgsConstructor寫在類上面
注意點
1、聲明的變量必須加上final修飾
2、基于構(gòu)造方法為屬性賦值,容器通過調(diào)用類的構(gòu)造方法將其進行依賴注入
三、@AllArgsConstructor和@RequiredArgsConstructor區(qū)別
1、@AllArgsConstructor 生成一個包含所有字段的構(gòu)造方法,如果使用了@Value注入,@Value注入會失效,原因是因為@Value注解是通過對象的set方法賦值的,構(gòu)造方法的執(zhí)行還在set方法之前,所以在構(gòu)造方法中使用變量會變量為null。 2、@RequiredArgsConstructor會將類的每一個final字段或者non-null字段生成一個構(gòu)造方法 總結(jié): @AllArgsConstructor和@RequiredArgsConstructor都可以用來替代@Autowired寫法,區(qū)別在于@RequiredArgsConstructor必須要有final修飾,如果有@Value注解,@RequiredArgsConstructor修飾可以成功注入,@AllArgsConstructor修飾會注入失敗
四、@NoArgsConstructor、@RequiredArgsConstructor和@AllArgsConstructor
1、@NoArgsConstructor
@NoArgsConstructor將生成一個沒有參數(shù)的構(gòu)造函數(shù)。如果這是不可能的(因為最終字段),將導(dǎo)致編譯器錯誤,除非@NoArgsConstructor(force = true)使用,然后使用0/ false/ 初始化所有最終字段null。對于具有約束的字段(如@NonNull字段),不會生成任何檢查,因此請注意,在稍后正確初始化這些字段之前,通常不會滿足這些約束。某些java構(gòu)造(例如hibernate和Service Provider Interface)需要no-args構(gòu)造函數(shù)。此注釋主要與@Data生成注釋的其他構(gòu)造函數(shù)之一或其中一個結(jié)合使用。
2、@RequiredArgsConstructor
@RequiredArgsConstructor為每個需要特殊處理的字段生成一個帶有1個參數(shù)的構(gòu)造函數(shù)。所有未初始化的final字段都會獲得一個參數(shù),以及標(biāo)記為@NonNull在聲明它們的位置未初始化的任何字段。對于標(biāo)記有的字段@NonNull,還會生成顯式空檢查。構(gòu)造函數(shù)將拋出一個NullPointerExceptionif用于標(biāo)記為@NonNullcontains 的字段的任何參數(shù)null。參數(shù)的順序與字段在類中的顯示順序相匹配。
3、@AllArgsConstructor
@AllArgsConstructor為類中的每個字段生成一個帶有1個參數(shù)的構(gòu)造函數(shù)。標(biāo)記為@NonNull結(jié)果的字段將檢查這些參數(shù)。
4、總結(jié)
這些注釋中的每一個都允許使用替代形式,其中生成的構(gòu)造函數(shù)始終是私有的,并且生成包圍私有構(gòu)造函數(shù)的附加靜態(tài)工廠方法。通過提供staticName注釋的值來啟用此模式,如下所示:@RequiredArgsConstructor(staticName="of")。與普通構(gòu)造函數(shù)不同,這種靜態(tài)工廠方法將推斷泛型。這意味著您的API用戶可以寫入MapEntry.of("foo", 5)而不是更長時間new MapEntry<String, Integer>("foo", 5)。 要在生成的構(gòu)造函數(shù)上添加注釋,可以使用onConstructor=@__({@AnnotationsHere}),但要小心; 這是一個實驗性功能。有關(guān)更多詳細信息,請參閱有關(guān)onX功能的文檔。 這些注釋會跳過靜態(tài)字段。 與大多數(shù)其他lombok注釋不同,顯式構(gòu)造函數(shù)的存在不會阻止這些注釋生成自己的構(gòu)造函數(shù)。這意味著您可以編寫自己的專用構(gòu)造函數(shù),并讓lombok生成樣板文件。如果出現(xiàn)沖突(您的一個構(gòu)造函數(shù)最終使用與lombok生成的簽名相同的簽名),則會發(fā)生編譯器錯誤。
總結(jié)
到此這篇關(guān)于Java中@RequiredArgsConstructor使用詳解的文章就介紹到這了,更多相關(guān)@RequiredArgsConstructor詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring中的特殊注解@RequiredArgsConstructor詳解
- 使用@RequiredArgsConstructor注解來取代繁瑣的@Autowrired
- 解讀@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor的區(qū)別及在springboot常用地方
- Java中的@RequiredArgsConstructor注解詳解
- Java中@RequiredArgsConstructor注解的基本用法
- @RequiredArgsConstructor如何實現(xiàn)構(gòu)造器注入
- springboot @RequiredArgsConstructor的概念與使用方式
相關(guān)文章
SpringBoot整合jasypt實現(xiàn)數(shù)據(jù)加密的步驟
聽說過jasypt嗎?它可是一個超級流行的Java庫哦,提供了簡單又高效的加密和解密接口,整合jasypt后,我們的SpringBoot應(yīng)用就能輕松處理敏感數(shù)據(jù)的加密和解密,而不必為復(fù)雜的加密算法頭疼啦,下面給大家介紹SpringBoot整合jasypt實現(xiàn)數(shù)據(jù)加密的步驟,感興趣的朋友一起看看吧2025-04-04spring framework體系結(jié)構(gòu)及模塊jar依賴關(guān)系詳解
在本篇文章里小編給大家整理的是關(guān)于spring framework體系結(jié)構(gòu)及模塊jar依賴關(guān)系,對此有興趣的朋友們可以學(xué)習(xí)下。2019-09-09Springboot項目打包如何將依賴的jar包輸出到指定目錄
公司要對springboot項目依賴的jar包進行升級,但是遇到一個問題,項目打包之后,沒辦法看到他里面依賴的jar包,版本到底是不是升上去了,沒辦法看到,下面通過本文給大家分享Springboot項目打包如何將依賴的jar包輸出到指定目錄,感興趣的朋友一起看看吧2024-05-05Java中Controller、Service、Dao/Mapper層的區(qū)別與用法
在Java開發(fā)中,通常會采用三層架構(gòu)(或稱MVC架構(gòu))來劃分程序的職責(zé)和功能,分別是Controller層、Service層、Dao/Mapper層,本文將詳細給大家介紹了三層的區(qū)別和用法,需要的朋友可以參考下2023-05-05