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)造方法將其進(jìn)行依賴注入
三、@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)更多詳細(xì)信息,請參閱有關(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)文章
Java實現(xiàn)兩個隨機(jī)數(shù)組合并進(jìn)行排序的方法
本文主要介紹了Java實現(xiàn)兩個隨機(jī)數(shù)組合并進(jìn)行排序的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
手把手帶你掌握SpringBoot RabbitMQ延遲隊列
RabbitMQ 是一個由Erlang語言開發(fā)的AMQP的開源實現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 延遲隊列2021-09-09
mybatis@insert?注解如何判斷insert或是update
這篇文章主要介紹了mybatis@insert?注解如何判斷insert或是update,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Spring Task 動態(tài)修改任務(wù)執(zhí)行計劃cron方式
這篇文章主要介紹了Spring Task 動態(tài)修改任務(wù)執(zhí)行計劃cron方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn)
本文主要介紹了SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn),主要包含JdbcTemplate和mybatis框架的整合應(yīng)用,具有一定的參考價值,感興趣的可以了解一下2022-03-03

