欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot的Bean類三種注入方式詳解

 更新時間:2024年12月11日 09:38:32   作者:漫天轉悠  
在 Spring Boot 中,Bean 的注入方式主要包括構造函數(shù)注入(Constructor Injection)、字段注入(Field Injection)以及 Setter 方法注入(Setter Injection),以下是這幾種注入方式的詳細介紹,并附上 Lombok 的注入方式,需要的朋友可以參考下

SpringBoot的Bean類三種注入方式(附帶LomBok注入)

在 Spring Boot 中,Bean 的注入方式主要包括構造函數(shù)注入(Constructor Injection)、字段注入(Field Injection)以及 Setter 方法注入(Setter Injection)。每種注入方式都有其特點和適用場景。此外,Lombok 提供了一種簡化依賴注入的方式,能夠減少樣板代碼,提高開發(fā)效率。以下是這幾種注入方式的詳細介紹,并附上 Lombok 的注入方式。

1. 構造函數(shù)注入(Constructor Injection)

使用場景:構造函數(shù)注入是 Spring 官方推薦的首選依賴注入方式,特別適用于強制性依賴項的注入。它確保了所有必需的依賴項在對象創(chuàng)建時就已經(jīng)存在,并且一旦對象被創(chuàng)建后,這些依賴項就不能再被更改,從而保證了對象狀態(tài)的一致性和不可變性。構造函數(shù)注入還可以幫助解決循環(huán)依賴的問題,因為 Spring 會在檢測到循環(huán)依賴時拋出異常,迫使開發(fā)者解決這個問題。

@Service
public class MyService {
    private final MyRepository repository;

    @Autowired // 可選,Spring 4.3+ 版本中可以省略
    public MyService(MyRepository repository) {
        this.repository = repository;
    }

    // ...
}

構造函數(shù)注入的一個顯著優(yōu)勢在于它可以與 final 關鍵字結合使用,使得依賴項成為不可變的屬性,增強了代碼的安全性和可讀性。對于那些需要確保依賴項在整個對象生命周期內都不會改變的場景,構造函數(shù)注入是非常理想的選擇。

2. 字段注入(Field Injection)

使用場景:字段注入是一種簡單直接的方式,通過在類的私有字段上添加 @Autowired 注解來實現(xiàn)依賴注入。這種方式的優(yōu)點在于代碼簡潔,易于閱讀,特別適合于小型項目或原型開發(fā)階段。然而,字段注入也存在一些潛在的風險,比如可能導致空指針異常,因為它允許對象在未完全初始化的情況下被使用。此外,字段注入還可能引發(fā)循環(huán)依賴的問題,并且不利于單元測試,因為無法輕松地為依賴項提供模擬實現(xiàn)。

@Service
public class MyService {
    @Autowired
    private MyRepository repository;

    // ...
}

盡管字段注入在某些情況下非常方便,但它并不是最佳實踐,尤其是在大型項目中,應該盡量避免使用字段注入,轉而采用更加安全可靠的構造函數(shù)注入或 Setter 方法注入。

3. Setter 方法注入(Setter Injection)

使用場景:Setter 方法注入允許通過調用類中的 Setter 方法來設置依賴項,通常用于非強制性依賴項的注入。這種方式提供了更大的靈活性,因為它允許在對象創(chuàng)建之后重新配置或更新依賴項。這對于那些需要動態(tài)調整依賴關系的場景非常有用,例如,在應用程序運行期間根據(jù)用戶輸入或其他外部條件來改變某些行為。不過,Setter 方法注入也有一定的局限性,比如它可能會導致對象處于不完整的狀態(tài),直到所有的 Setter 方法都被調用為止。

@Service
public class MyService {
    private MyRepository repository;

    @Autowired
    public void setRepository(MyRepository repository) {
        this.repository = repository;
    }

    // ...
}

Setter 方法注入的一個重要優(yōu)點是它支持多參數(shù)的依賴注入,當一個類有多個依賴項時,使用 Setter 方法注入可以使代碼更加清晰易懂。此外,Setter 方法注入還允許在不修改現(xiàn)有代碼的情況下添加新的依賴項,這對于維護和擴展已有系統(tǒng)非常重要。

4. 使用 Lombok 進行依賴注入

使用場景:Lombok 是一款流行的 Java 庫,旨在減少樣板代碼,提高開發(fā)效率。它可以通過注解自動生成常見的 getter、setter、構造函數(shù)等方法,從而簡化依賴注入的過程。Lombok 支持兩種主要的依賴注入方式:構造函數(shù)注入和 Setter 方法注入。使用 Lombok 可以顯著減少手動編寫重復代碼的工作量,使代碼更加簡潔明了。

構造函數(shù)注入

Lombok 提供了 @RequiredArgsConstructor 注解,它可以為所有 final 或者帶有 @NonNull 標記但未初始化的字段生成一個構造函數(shù)。這個構造函數(shù)會自動帶上 @Autowired 注解,從而實現(xiàn)依賴注入。這種方式不僅減少了代碼量,還保持了構造函數(shù)注入的安全性和不可變性特性。

@Service
@RequiredArgsConstructor(onConstructor_ = @__(@Autowired)) // 適用于 Spring 4.3 以下版本
// 對于 Spring 4.3 及以上版本可以直接使用 @RequiredArgsConstructor
public class MyService {
    private final MyRepository repository;
}

Setter 方法注入

Lombok 也支持通過 @Setter 注解來自動生成 Setter 方法,并且可以在生成的 Setter 方法上自動添加 @Autowired 注解。這種方式特別適合那些需要在對象創(chuàng)建后動態(tài)調整依賴關系的場景。不過,需要注意的是,Setter 方法注入可能會導致對象處于不完整狀態(tài)的風險,因此應謹慎使用。

@Service
@Setter(onMethod_ = @Autowired)
public class MyService {
    private MyRepository repository;
}

總結

綜上所述,構造函數(shù)注入、字段注入和 Setter 方法注入各有優(yōu)劣,適用于不同的場景。構造函數(shù)注入因其安全性、不可變性和對循環(huán)依賴的有效處理而成為首選;字段注入雖然簡單但存在風險,更適合快速開發(fā)和小型項目;Setter 方法注入則提供了額外的靈活性,適合那些需要動態(tài)調整依賴關系的應用程序。Lombok 的引入進一步簡化了依賴注入的過程,減少了樣板代碼,提高了開發(fā)效率。開發(fā)者應當根據(jù)項目的具體需求和個人偏好,合理選擇最適合的注入方式。值得注意的是,隨著 Spring 框架的發(fā)展,官方越來越傾向于推薦構造函數(shù)注入,因為它能夠更好地滿足現(xiàn)代軟件開發(fā)的最佳實踐。

以上就是SpringBoot的Bean類三種注入方式詳解的詳細內容,更多關于SpringBoot Bean類注入方式的資料請關注腳本之家其它相關文章!

相關文章

  • java讀取文件:char的ASCII碼值=65279,顯示是一個空字符的解決

    java讀取文件:char的ASCII碼值=65279,顯示是一個空字符的解決

    這篇文章主要介紹了java讀取文件:char的ASCII碼值=65279,顯示是一個空字符的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java解析JSON的六大工具介紹與對比

    Java解析JSON的六大工具介紹與對比

    在?Java?開發(fā)中,解析?JSON?是一個非常常見的需求,不管是和前端交互、調用第三方接口,還是處理配置文件,本文總結了6種主流的?JSON?解析方法,希望對大家有所幫助
    2025-01-01
  • 修改request的parameter的幾種方式總結

    修改request的parameter的幾種方式總結

    這篇文章主要介紹了修改request的parameter的幾種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java手寫線程池的實現(xiàn)方法

    Java手寫線程池的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了Java手寫線程池的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • JAVA后端學習精華之網(wǎng)絡通信項目進階

    JAVA后端學習精華之網(wǎng)絡通信項目進階

    不同項目之間的通信方式分為,http、socket、webservice;其中socket通信的效率最高,youtube就采用的是原始的socket通信,他們信奉的原則是簡單有效
    2021-09-09
  • SpringBoot結合Tess4J實現(xiàn)拍圖識字的示例代碼

    SpringBoot結合Tess4J實現(xiàn)拍圖識字的示例代碼

    圖片中的文字提取已經(jīng)越來越多地應用于數(shù)據(jù)輸入和自動化處理過程,本文主要介紹了SpringBoot結合Tess4J實現(xiàn)拍圖識字的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 簡單的java讀取文件示例分享

    簡單的java讀取文件示例分享

    這篇文章主要介紹了java讀取txt文件內容,示例很簡單,代碼里有注釋,大家直接看代碼吧
    2014-01-01
  • 詳解如何使用Mybatis的攔截器

    詳解如何使用Mybatis的攔截器

    MyBatis?攔截器是?MyBatis?提供的一個強大特性,它允許你在?MyBatis?執(zhí)行其核心邏輯的關鍵節(jié)點插入自定義邏輯,從而改變?MyBatis?的默認行為,本文給大家詳細介紹了如何使用Mybatis的攔截器,需要的朋友可以參考下
    2024-03-03
  • Java多線程局域網(wǎng)聊天室的實現(xiàn)

    Java多線程局域網(wǎng)聊天室的實現(xiàn)

    在學習了一個學期的java以后,搞了一個多線程的聊天室,熟悉了一下服務器和客戶機的操作。感興趣的小伙伴們可以參考一下
    2021-06-06
  • 解決IDEA無法讀取maven鏡像,jar包下載失敗的問題

    解決IDEA無法讀取maven鏡像,jar包下載失敗的問題

    這篇文章主要介紹了解決IDEA無法讀取maven鏡像,jar包下載失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論