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

SpringBoot之為何推薦使用構造器注入

 更新時間:2024年03月27日 10:22:18   作者:Kareza  
這篇文章主要介紹了SpringBoot之為何推薦使用構造器注入問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

概述

通過對注解注入、 Setter 注入與構造器注入三種注入方式的橫向對比,解釋為何 SpringBoot 推薦用戶使用構造器注入。

注解注入

美觀、大方,只需要一個注解 @Autowired 就可以完成注入。

Show Code

Computer.java

/**
 * [ 計算機 ]
 *
 * @author Kareza
 * @time 2021/5/25 10:58 上午
 * @since 1.8
 */
@Component
public class Computer {
    /**
     * 上網
     */
    public void surfInternet(String user) {
        Console.log("{} 正在上網沖浪", user);
    }
}

Room.java

/**
 * [ 房間 ]
 * @author Kareza
 * @since 1.8
 * @time 2021/5/25 11:42 上午
 */
@Service
public class Room {

    @Autowired
    private Computer computer;

    /**
     * 書房
     */
    public void schoolroom() {
        Console.log("書房里~~");
        // 網上沖浪
        computer.surfInternet("chenyiqiang");
    }
}

對于IOC容器以外的環(huán)境,除了使用反射來提供它需要的依賴之外,無法復用該實現類。

Room room = new Room();
room.schollroom(); // -> NullPointerException

且注解注入可能會導致循環(huán)依賴,在A中注入B,在B中又注入A。

Setter注入

靈活,可以在類實例化后,重新注入。

Show Code

Computer.java

同上

Room.java

/**
 * [ 房間 ]
 * @author Kareza
 * @since 1.8
 * @time 2021/5/25 11:42 上午
 */
@Service
public class Room {

    private Computer computer;

    @Autowired
    public void setComputer(Computer computer) {
        this.computer = computer;
    }

    /**
     * 書房
     */
    public void schoolroom() {
        Console.log("書房里~~");
        // 網上沖浪
        computer.surfInternet("chenyiqiang");
    }
}

其實在 Spring 3.x 官方推薦的注入方式就是這種,因為考慮到使用構造器注的方式,如果需要注入到依賴過多,就會使得構造器的參數過長。

但在更新到 4.x 官方又轉回推薦構造器注入,原因下文會說。

構造器注入

保證注入的組件不可變不為空

保證使用構造器注入的類呈完全初始化的狀態(tài)

Show Code

Computer.java

同上

Room.java

/**
 * [ 房間 ]
 * @author Kareza
 * @since 1.8
 * @time 2021/5/25 11:42 上午
 */
@Service
public class Room {

    private final Computer computer;

    @Autowired
    public Room(Computer computer) {
        this.computer = computer;
    }

    /**
     * 書房
     */
    public void schoolroom() {
        Console.log("書房里~~");
        // 網上沖浪
        computer.surfInternet("chenyiqiang");
    }
}

因為使用 final 修飾詞,所以保證了注入組件的不可變。

因為代碼中實現了有參構造器,且該參數需由 Spring 容器傳入,當 Spring 容器中沒有該參數,則返回錯誤,所以保證了注入組件不為空。

在將依賴組件傳入 Room 對象構造器前,必須先調用依賴組件的構造方法,所以返回的是完全初始化的狀態(tài)。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Shell重啟SpringBoot項目腳本的示例代碼(含服務守護)

    Shell重啟SpringBoot項目腳本的示例代碼(含服務守護)

    本文介紹了如何使用?Bash?腳本來管理和守護運行服務,將展示一個示例腳本,該腳本可以停止、啟動和守護運行一個服務,并提供了相應的解釋和用法說明,文章通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • springboot如何初始化執(zhí)行sql語句

    springboot如何初始化執(zhí)行sql語句

    這篇文章主要介紹了springboot初始化執(zhí)行sql語句的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java實現自定義日期選擇器的方法實例

    java實現自定義日期選擇器的方法實例

    日期選擇器是我們日常開發(fā)中經常需要用到的一個功能,下面這篇文章主要給大家介紹了關于利用java實現自定義日期選擇器的相關資料,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-10-10
  • SpringBoot工程Docker多環(huán)境中使用同一個Jar包解決方案

    SpringBoot工程Docker多環(huán)境中使用同一個Jar包解決方案

    在Docker多環(huán)境部署中,SpringBoot工程可以通過環(huán)境變量來動態(tài)改變配置,無需重新打包,利用volume掛載或docker?cp命令,可以將配置文件直接傳入容器,提高部署效率,并保證安全性
    2024-09-09
  • 服務器實現Java遠程訪問Linux服務器方式(JSch)

    服務器實現Java遠程訪問Linux服務器方式(JSch)

    文章介紹了如何使用Java遠程訪問Linux服務器,主要包括建立SSH連接、使用JSch庫執(zhí)行命令、解析返回值以及關閉連接的步驟
    2024-11-11
  • Java實現MySQL數據實時同步至Elasticsearch的方法詳解

    Java實現MySQL數據實時同步至Elasticsearch的方法詳解

    MySQL擅長事務處理,而Elasticsearch(ES)則專注于搜索與分析,將MySQL數據實時同步到ES,可以充分發(fā)揮兩者的優(yōu)勢,下面我們就來看看如何使用Java實現這一功能吧
    2025-03-03
  • Java堆&優(yōu)先級隊列示例講解(上)

    Java堆&優(yōu)先級隊列示例講解(上)

    這篇文章主要通過示例詳細為大家介紹Java中的堆以及優(yōu)先級隊列,文中的示例代碼講解詳細,對我們了解java有一定幫助,需要的可以參考一下
    2022-03-03
  • java之使用多線程代替for循環(huán)(解決主線程提前結束問題)

    java之使用多線程代替for循環(huán)(解決主線程提前結束問題)

    這篇文章主要介紹了java之使用多線程代替for循環(huán)(解決主線程提前結束問題),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Boot系列教程之7步集成RabbitMQ的方法

    Spring Boot系列教程之7步集成RabbitMQ的方法

    RabbitMQ 即一個消息隊列,主要是用來實現應用程序的異步和解耦,同時也能起到消息緩沖,消息分發(fā)的作用。下面這篇文章主要給大家介紹了關于Spring Boot之7步集成RabbitMQ的相關資料,需要的朋友可以參考下
    2018-11-11
  • JPA @Basic單表查詢如何實現大字段懶加載

    JPA @Basic單表查詢如何實現大字段懶加載

    這篇文章主要介紹了JPA @Basic單表查詢如何實現大字段懶加載的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論