最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring?和?idea?建議不要使用?@Autowired注解的原因解析

 更新時間:2023年11月02日 12:52:17   作者:神的孩子都在歌唱  
@Autowired?是Spring框架的注解,而@Resource是JavaEE的注解,這篇文章主要介紹了spring和idea建議不要使用@Autowired注解的相關知識,需要的朋友可以參考下

前言

這是我在這個網(wǎng)站整理的筆記,有錯誤的地方請指出,關注我,接下來還會持續(xù)更新。 作者:神的孩子都在歌唱

一. 問題描述

公司項目閑下來了之后,我就開始整理之前寫過的代碼,發(fā)現(xiàn)每個Autowired下面都有警告,**Field injection is not recommended(不建議使用字段注入)**這是什么意思呢?

請?zhí)砑訄D片描述

二. 警告原因和如何去除

百度了一圈,以下是我總結(jié)的問題答案

雖然 @Autowired 是 Spring Boot 中最常用的依賴注入方式之一,但是在實際開發(fā)中,建議盡量避免使用 @Autowired,而是使用構(gòu)造函數(shù)注入或者 @Resource 注解注入。

以下是使用 @Autowired 存在的一些問題:

  • 不夠明確:在使用 @Autowired 進行依賴注入時,Spring 會自動根據(jù)類型來匹配 Bean,如果存在多個類型相同的 Bean,就會產(chǎn)生歧義。此時,需要使用 @Qualifier 注解或者 @Primary 注解來指定具體的 Bean。但是,這種方式不夠明確,容易出現(xiàn)錯誤。
  • 難以測試:使用 @Autowired 進行依賴注入時,需要在測試中手動創(chuàng)建 Bean,并將其注入到測試類中。這種方式比較麻煩,而且容易出現(xiàn)錯誤。
  • 無法保證依賴注入的順序:在使用 @Autowired 進行依賴注入時,Spring 會根據(jù) Bean 的創(chuàng)建順序來注入依賴,這種方式無法保證依賴注入的順序。

因此,在實際開發(fā)中,建議使用構(gòu)造函數(shù)注入或者 @Resource 注解注入。這種方式更加明確、易于測試,并且可以保證依賴注入的順序,所以idea不建議使用Autowired注入了。

例如,使用構(gòu)造函數(shù)注入的方式可以這樣寫:

@Service
public class UserService {
    private final UserRepository userRepository;
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    // ...
}

或者使用 @Resource 注解注入的方式可以這樣寫:

@Service
public class UserService {
    @Resource
    private UserRepository userRepository;
    // ...
}

這些方式都可以避免使用 @Autowired 帶來的警告問題。

三. 個人的收獲和解決方案

3. 1 個人感受

參考了很多個文章之后,我不在使用autowired對我來說使用autowired最大的問題是會寫出很多個循環(huán)依賴出來,雖然Spring 使用了三級緩存來處理循環(huán)依賴,項目也能夠正常運行,但是這樣會導致很多循環(huán)依賴問題我們發(fā)現(xiàn)不了,寫出很多不規(guī)范的代碼。每個模塊之間應該是分層的,每個模塊、類或方法應該只負責一個明確的功能或任務,遵循單一職責

像以下循環(huán)依賴的報錯,使用autowired就能夠解決

以上是我的收獲,不知道有沒有理解錯誤的地方,希望大家指出

3.2 通過構(gòu)造函數(shù)解決警告問題

為了消除警告,避免寫出循環(huán)依賴的代碼,我就使用了構(gòu)造函數(shù)注入,以下是我項目中使用的方式,通過@RequiredArgsConstructor可以減少很多代碼

@RequiredArgsConstructor是Lombok框架中的注解之一,用于自動生成一個包含所有必需參數(shù)的構(gòu)造函數(shù)。它可以幫助開發(fā)人員減少代碼量,避免手動編寫構(gòu)造函數(shù)。使用@RequiredArgsConstructor注解時,Lombok會自動檢測類中所有被聲明為final的字段,并將其作為構(gòu)造函數(shù)的參數(shù)。生成的構(gòu)造函數(shù)將使用這些參數(shù)來初始化字段。

例如,下面是一個使用@RequiredArgsConstructor注解:

@RequiredArgsConstructor
public class MyService {
    private final MyRepository myRepository;
    private final MyLogger myLogger;
    // ...
}

@RequiredArgsConstructor注解會自動生成一個構(gòu)造函數(shù),該構(gòu)造函數(shù)包含兩個參數(shù):myRepositorymyLogger。這兩個參數(shù)都是被聲明為final的字段,因此它們將被用于初始化相應的字段。

生成的構(gòu)造函數(shù)等效于以下代碼:

public class MyService {
    private final MyRepository myRepository;
    private final MyLogger myLogger;
    public MyService(MyRepository myRepository, MyLogger myLogger) {
        this.myRepository = myRepository;
        this.myLogger = myLogger;
    }
    // ...
}

使用@RequiredArgsConstructor注解可以讓開發(fā)人員更快地編寫代碼,并避免手動編寫構(gòu)造函數(shù)。將字段聲明為final,以確保不可變性和線程安全性。

四. 小知識

4.1 使用@Autowired還會出現(xiàn)循環(huán)依賴的問題么

使用 @Autowired 仍然可能會出現(xiàn)循環(huán)依賴的問題。

Spring 容器在初始化時會先實例化所有的 bean,然后再進行依賴注入。如果 A bean 依賴了 B bean,而 B bean 又依賴了 A bean,就會出現(xiàn)循環(huán)依賴的問題。為了解決這個問題,Spring 使用了三級緩存來處理循環(huán)依賴。當容器在初始化 A bean 時,如果發(fā)現(xiàn)它依賴了 B bean,就會先創(chuàng)建一個 A bean 的代理對象,然后將代理對象放入第一級緩存中。接著容器會創(chuàng)建 B bean,并將其注入到 A bean 的代理對象中。最后再將 A bean 的代理對象注入到 B bean 中。但是,如果循環(huán)依賴的鏈條過長,就有可能導致 Spring 容器無法解決循環(huán)依賴的問題,此時就會拋出 BeanCurrentlyInCreationException 異常。因此,在使用 @Autowired 進行依賴注入時,需要注意避免出現(xiàn)循環(huán)依賴的情況。

4.2 @Autowired 和 @Resource區(qū)別

  • @Autowired 是 Spring 框架的注解,而 @Resource 是 JavaEE 的注解。
  • @Autowired 默認按照類型進行匹配,如果有多個同類型的 bean,則可以通過 @Qualifier 指定具體的 bean 名稱。而 @Resource 默認按照名稱進行匹配,如果名稱匹配不到,則可以通過 name 屬性指定具體的 bean 名稱。
  • @Autowired 可以用在構(gòu)造方法、setter 方法、字段上,而 @Resource 只能用在字段上。
  • @Autowired 是 Spring 框架的特有功能,而 @Resource 是 JavaEE 的標準功能,在使用時需要注意兼容性問題。
  • 都可以用于依賴注入

到此這篇關于spring 和 idea 建議不要使用 @Autowired注解的文章就介紹到這了,更多相關spring和 idea 不使用 @Autowired注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot項目多數(shù)據(jù)源及mybatis 駝峰失效的問題解決方法

    SpringBoot項目多數(shù)據(jù)源及mybatis 駝峰失效的問題解決方法

    這篇文章主要介紹了SpringBoot項目多數(shù)據(jù)源及mybatis 駝峰失效的問題解決方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • java實現(xiàn)CSV文件導入與導出功能

    java實現(xiàn)CSV文件導入與導出功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)CSV文件導入與導出,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • mybatis?plus框架@TableField注解不生效問題及解決方案

    mybatis?plus框架@TableField注解不生效問題及解決方案

    最近遇到一個mybatis plus的問題,@TableField注解不生效,導致查出來的字段反序列化后為空,今天通過本文給大家介紹下mybatis?plus框架的@TableField注解不生效問題總結(jié),需要的朋友可以參考下
    2022-03-03
  • Spring高級接口Aware淺析

    Spring高級接口Aware淺析

    通過aware接口可以獲取Spring容器相關信息,但這樣會與Spring容器耦合,這篇文章主要介紹了Spring aware接口理解,需要的朋友可以參考下
    2023-01-01
  • 利用session實現(xiàn)簡單購物車功能

    利用session實現(xiàn)簡單購物車功能

    這篇文章主要為大家詳細介紹了利用session實現(xiàn)簡單購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java中Switch?Case多個條件處理方法舉例

    Java中Switch?Case多個條件處理方法舉例

    Java中switch語句用于根據(jù)變量值執(zhí)行不同代碼塊,適用于多個條件的處理,這篇文章主要介紹了Java中Switch?Case多個條件處理的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Java中Reactor的反應器模式詳解

    Java中Reactor的反應器模式詳解

    這篇文章主要介紹了Java中Reactor的反應器模式詳解,Reactor反應器模式有點兒類似事件驅(qū)動模式,當有事件觸發(fā)時,事件源會將事件dispatch分發(fā)到handler處理器進行事件處理,反應器模式中的反應器角色類似于事件驅(qū)動模式中的dispatcher事件分發(fā)器角色,需要的朋友可以參考下
    2023-12-12
  • java實現(xiàn)發(fā)送郵件的示例代碼

    java實現(xiàn)發(fā)送郵件的示例代碼

    這篇文章主要介紹了java如何實現(xiàn)發(fā)送郵件,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • 利用keytools為tomcat 7配置ssl雙向認證的方法

    利用keytools為tomcat 7配置ssl雙向認證的方法

    雙向認證和單向認證原理基本差不多,只是除了客戶端需要認證服務端以外,增加了服務端對客戶端的認證,下面這篇文章主要介紹了利用keytools為tomcat 7配置ssl雙向認證的方法,需要的朋友可以借鑒,下面來一起看看吧。
    2017-02-02
  • Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實例

    Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實例

    下面小編就為大家?guī)硪黄狫ava用POI解析excel并獲取所有單元格數(shù)據(jù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

灵台县| 阿合奇县| 乌恰县| 昭觉县| 门头沟区| 凌源市| 西盟| 界首市| 罗源县| 长岛县| 尼木县| 鲁甸县| 涿州市| 平谷区| 崇左市| 固安县| 孟津县| 色达县| 金堂县| 谢通门县| 万源市| 靖西县| 察雅县| 民勤县| 洛浦县| 云林县| 嘉兴市| 仙游县| 兰西县| 调兵山市| 宁德市| 洪洞县| 三亚市| 逊克县| 义乌市| 鸡东县| 凤城市| 长垣县| 云和县| 信阳市| 南投市|