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

Java Spring的依賴注入理解及@Autowired用法示例詳解

 更新時(shí)間:2025年07月23日 14:29:57   作者:{?■_■}  
文章介紹了Spring依賴注入(DI)的概念、三種實(shí)現(xiàn)方式(構(gòu)造器、Setter、字段注入),區(qū)分了@Autowired(注入Bean)與@Value(注入簡單類型)的用途,并說明@Bean方法參數(shù)可自動裝配依賴,無需顯式注解,感興趣的朋友跟隨小編一起看看吧

一、什么是依賴注入(DI)?

1. 定義

依賴注入(Dependency Injection) 是 Spring 框架的核心功能之一,它指的是:

由 Spring 容器來管理對象之間的依賴關(guān)系,并自動將依賴對象注入到目標(biāo)對象中。

2. 舉個例子

比如:

public class BookService {
    private BookDao bookDao;
}

這里 BookService 依賴于 BookDao,如果手動創(chuàng)建:

BookDao bookDao = new BookDaoImpl();
BookService service = new BookService(bookDao);

而使用 Spring 后,你只需要告訴 Spring:

“我需要一個 BookDao,你幫我自動注入進(jìn)來。”

Spring 會自動完成這個過程。

二、依賴注入的幾種方式

1. 構(gòu)造器注入(Constructor Injection)

public class BookService {
    private final BookDao bookDao;
    public BookService(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

2. Setter 注入(Setter Injection)

public class BookService {
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

3. 字段注入(Field Injection)—— 使用@Autowired

public class BookService {
    @Autowired
    private BookDao bookDao;
}

?? 注意:字段注入雖然方便,但不利于測試和維護(hù),推薦使用構(gòu)造器注入

三、@Autowired和@Value的區(qū)別

注解用途注入類型
@Autowired注入 Spring 容器中的 Bean 對象引用類型(如 Bean)
@Value注入基本類型、字符串、SpEL 表達(dá)式簡單類型(如 String、int)

示例:

? 引用類型注入(用@Autowired)

public class BookService {
    @Autowired
    private BookDao bookDao; // 注入一個 Bean
}

? 簡單類型注入(用@Value)

public class AppConfig {
    @Value("com.mysql.jdbc.Driver")
    private String driver;
}

四、在@Bean方法中如何注入依賴?

你提到的這段代碼:

@Bean
public DataSource dataSource(BookDao bookDao) { // 引用類型直接添加形參
    ...
}

說明:

  • 這是 基于 Java 配置類 的方式定義 Bean。
  • Spring 會自動將BookDao類型的 Bean 注入進(jìn)來。
  • 不需要再寫 @Autowired,因?yàn)?Spring 會自動根據(jù)類型進(jìn)行裝配。

五、總結(jié)

問題回答
什么是依賴注入?Spring 自動幫你把需要的對象注入進(jìn)來
怎么使用?構(gòu)造器、Setter、字段注入(@Autowired
@Autowired 是干嘛的?注入引用類型(Bean)
@Value 是干嘛的?注入簡單類型(字符串、數(shù)字等)
為什么 @Bean 方法里可以直接加形參?Spring 會根據(jù)類型自動裝配
@Autowired 這里不能用嗎?@Bean 方法參數(shù)中不需要,因?yàn)?Spring 自動裝配了

方法參數(shù)注入和@Autowired注入?yún)^(qū)別

  • 方法參數(shù)注入:用于在某個方法內(nèi)部臨時(shí)使用一個 Bean,比如定義 @Bean
  • @Autowired 字段注入:用于把 Bean 綁定到類中,整個類都可以用。

? 兩種引用類型依賴注入方式對比

方式注解使用位置說明示例
構(gòu)造器/方法參數(shù)注入無(Spring 自動裝配)@Bean 方法參數(shù) / 構(gòu)造器參數(shù)Spring 會根據(jù)類型自動將依賴注入到方法參數(shù)中public DataSource dataSource(BookDao bookDao)
字段注入 / 成員變量注入@Autowired類成員變量Spring 會自動將 Bean 注入到字段上@Autowired private BookDao bookDao;

?? 通俗理解

1.方法參數(shù)注入(如@Bean方法中)

@Bean
public DataSource dataSource(BookDao bookDao) {
    ...
}
  • Spring 會自動把已經(jīng)注冊的BookDao Bean 注入到這個方法參數(shù)中。
  • 這是一種 臨時(shí)使用依賴 的方式,適合在配置類中定義 Bean 時(shí)使用。
  • 不需要 @Autowired,Spring 會自動完成注入。

2.字段注入(使用@Autowired)

@Component
public class BookService {
    @Autowired
    private BookDao bookDao;
}
  • 這是 把依賴綁定到類本身,類的整個生命周期都可以使用這個依賴。
  • 適用于業(yè)務(wù)組件、Service、Controller 等類中。
  • 必須使用 @Autowired 來告訴 Spring 要注入什么。

https://github.com/0voice

到此這篇關(guān)于Java Spring的依賴注入理解及@Autowired用法示例詳解的文章就介紹到這了,更多相關(guān)spring依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一次詭異的full gc查找問題全過程

    一次詭異的full gc查找問題全過程

    這篇文章主要給大家分享介紹了一次詭異的full gc查找問題全部過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧啊
    2018-11-11
  • Spring緩存機(jī)制實(shí)例代碼

    Spring緩存機(jī)制實(shí)例代碼

    這篇文章主要介紹了Spring緩存機(jī)制實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • java TreeUtil菜單遞歸工具類

    java TreeUtil菜單遞歸工具類

    這篇文章主要為大家詳細(xì)介紹了java TreeUtil菜單遞歸工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 在spring中實(shí)例化bean無效的問題

    在spring中實(shí)例化bean無效的問題

    這篇文章主要介紹了在spring中實(shí)例化bean無效的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringCloud?OpenFeign?服務(wù)調(diào)用傳遞?token的場景分析

    SpringCloud?OpenFeign?服務(wù)調(diào)用傳遞?token的場景分析

    這篇文章主要介紹了SpringCloud?OpenFeign?服務(wù)調(diào)用傳遞?token的場景分析,本篇文章簡單介紹?OpenFeign?調(diào)用傳遞?header?,以及多線程環(huán)境下可能會出現(xiàn)的問題,其中涉及到?ThreadLocal?的相關(guān)知識,需要的朋友可以參考下
    2022-07-07
  • java實(shí)現(xiàn)簡單的俄羅斯方塊

    java實(shí)現(xiàn)簡單的俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單的俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 聊聊Java和CPU的關(guān)系

    聊聊Java和CPU的關(guān)系

    java和cpu關(guān)系不大,但是也有點(diǎn)關(guān)系,下面我們來聊一聊java和cpu的關(guān)系,感興趣的朋友一起看看吧
    2016-08-08
  • springboot加載一個properties文件轉(zhuǎn)換為map方式

    springboot加載一個properties文件轉(zhuǎn)換為map方式

    這篇文章主要介紹了springboot加載一個properties文件轉(zhuǎn)換為map方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25開發(fā)環(huán)境搭建圖文教程

    spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25開發(fā)環(huán)境搭

    這篇文章主要介紹了spring mvc4.1.6 + spring4.1.6 + hibernate4.3.11+mysql5.5.25開發(fā)環(huán)境搭建圖文教程,需要的朋友可以參考下
    2016-06-06
  • 詳談jvm線程??臻g內(nèi)存分配位置

    詳談jvm線程棧空間內(nèi)存分配位置

    這篇文章主要介紹了jvm線程??臻g內(nèi)存分配位置,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論