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

一文淺析如何在Spring中配置自動(dòng)注入

 更新時(shí)間:2026年04月10日 14:17:12   作者:用戶93656888870  
本文介紹了Spring中的自動(dòng)注入機(jī)制,包括在XML配置文件中手動(dòng)配置自動(dòng)注入、全局開(kāi)啟自動(dòng)注入以及使用注解方式自動(dòng)注入,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

Spring配置自動(dòng)注入是什么

在 Spring 框架中,“自動(dòng)注入”(Autowiring)是依賴注入(Dependency Injection, DI)的一種具體實(shí)現(xiàn)方式。它允許 Spring 容器自動(dòng)識(shí)別 Bean 之間的依賴關(guān)系,并將所需的依賴 Bean “自動(dòng)”注入到當(dāng)前 Bean 中,而無(wú)需開(kāi)發(fā)人員顯式編寫(xiě) setter 方法或構(gòu)造函數(shù)參數(shù)。

簡(jiǎn)單說(shuō):你只需聲明“我需要一個(gè) X 類型的對(duì)象”,Spring 就會(huì)從容器中找出匹配的 X 實(shí)例,并幫你賦值。

為什么需要自動(dòng)注入?

  • 解耦:組件之間不直接通過(guò) new 創(chuàng)建依賴,而是通過(guò)接口聲明,降低耦合。
  • 易測(cè)試:可以輕松替換為 Mock 對(duì)象。
  • 可維護(hù):依賴關(guān)系集中由 Spring 管理,修改依賴時(shí)無(wú)需改動(dòng)大量代碼。

XML 中配置自動(dòng)注入(autowire)

在 ??<bean>?? 里加 ??autowire??? 屬性即可實(shí)現(xiàn)自動(dòng)注入。

四種自動(dòng)注入策略

  • ??default??:默認(rèn),不自動(dòng)注入
  • ??byName??:按屬性名匹配 Bean 的 id
  • ??byType??:按類型匹配(同類型只能有一個(gè) Bean)
  • ??constructor??:按構(gòu)造方法參數(shù)注入

最常用:byType 按類型自動(dòng)注入

<bean id="userDao" class="com.demo.dao.UserDaoImpl"/>

<!-- autowire="byType" 自動(dòng)按類型注入 -->
<bean id="userService" class="com.demo.service.UserServiceImpl" 
      autowire="byType">
</bean>

Spring 會(huì)自動(dòng)查找: ??UserServiceImpl?? 里的 ??UserDao?? 類型 → 找到 ??userDao?? → 自動(dòng)注入。

byName 按名稱注入

<bean id="userDao" class="com.demo.dao.UserDaoImpl"/>

<bean id="userService" class="com.demo.service.UserServiceImpl" 
      autowire="byName">
</bean>

要求:屬性名 == bean 的 id ??private UserDao userDao;?? → 匹配 id="userDao"

全局開(kāi)啟自動(dòng)注入(很少用)

<beans default-autowire="byType">

所有 Bean 都自動(dòng)注入。

注解方式自動(dòng)注入(企業(yè)開(kāi)發(fā) 99% 用這個(gè))

開(kāi)啟注解掃描(XML 里加一句)

<context:component-scan base-package="com.demo"/>

使用 ??@Autowired?? 自動(dòng)注入(最核心)

@Service
public class UserServiceImpl implements UserService {

    // 自動(dòng)按類型注入
    @Autowired
    private UserDao userDao;

}

不需要 set 方法!

@Autowired 工作機(jī)制

  • 默認(rèn) byType 按類型注入
  • 同一類型多個(gè) Bean 時(shí),會(huì)報(bào)錯(cuò)
  • 想按名稱匹配,搭配 ?? @Qualifier("beanId") ??
@Autowired
@Qualifier("userDaoImpl")
private UserDao userDao;

@Resource(Java 標(biāo)準(zhǔn)注解)

效果和 @Autowired 類似,默認(rèn) byName

@Resource(name = "userDao")
private UserDao userDao;

構(gòu)造器注入:官方推薦方式(Spring 4+)

Spring 官方文檔明確推薦:對(duì)于強(qiáng)制性依賴,使用構(gòu)造器注入。

優(yōu)點(diǎn)

  • 依賴不可變(可聲明 final 字段)。
  • 便于單元測(cè)試(無(wú)需反射)。
  • 避免循環(huán)依賴(Spring 能檢測(cè)構(gòu)造器循環(huán)依賴并報(bào)錯(cuò))。

示例

@Component
public class UserService {
    private final UserDao userDao;
    private final LogService logService;
    // 無(wú)需 @Autowired,Spring 4.3+ 自動(dòng)推斷
    public UserService(UserDao userDao, LogService logService) {
        this.userDao = userDao;
        this.logService = logService;
    }
}

最佳實(shí)踐建議

優(yōu)先使用構(gòu)造器注入:對(duì)于必需依賴,使用構(gòu)造器并盡量省略 @Autowired(Spring 4.3+)。

避免字段注入:它會(huì)使代碼難以單元測(cè)試,且違反單一職責(zé)(依賴過(guò)多不易察覺(jué))。

明確使用 @Qualifier:當(dāng)存在歧義時(shí),明確指定名稱,避免隱式依賴。

利用 @Primary:為最常用的實(shí)現(xiàn)類標(biāo)記為 @Primary,減少重復(fù) @Qualifier。

結(jié)合 Lombok:使用 @RequiredArgsConstructor 自動(dòng)生成構(gòu)造器,簡(jiǎn)化代碼。

總結(jié)

  • XML 自動(dòng)注入:??autowire="byType/byName"??
  • 注解自動(dòng)注入:??@Autowired??(企業(yè)首選)
  • 多個(gè)同類型 Bean:用 ??@Qualifier?? 指定名字

到此這篇關(guān)于一文淺析如何在Spring中配置自動(dòng)注入的文章就介紹到這了,更多相關(guān)Spring配置自動(dòng)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+Spring Security+JWT實(shí)現(xiàn)RESTful Api權(quán)限控制的方法

    SpringBoot+Spring Security+JWT實(shí)現(xiàn)RESTful Api權(quán)限控制的方法

    這篇文章主要介紹了SpringBoot+Spring Security+JWT實(shí)現(xiàn)RESTful Api權(quán)限控制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 淺談Java 繼承接口同名函數(shù)問(wèn)題

    淺談Java 繼承接口同名函數(shù)問(wèn)題

    這篇文章主要介紹了淺談Java 繼承接口同名函數(shù)問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringMVC和rabbitmq集成的使用案例

    SpringMVC和rabbitmq集成的使用案例

    這篇文章主要介紹了SpringMVC和rabbitmq集成的使用案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Java獲取當(dāng)前時(shí)間String類型和Date類型方式

    Java獲取當(dāng)前時(shí)間String類型和Date類型方式

    這篇文章主要介紹了Java獲取當(dāng)前時(shí)間String類型和Date類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • Java數(shù)據(jù)類型與運(yùn)算符詳細(xì)代碼示例

    Java數(shù)據(jù)類型與運(yùn)算符詳細(xì)代碼示例

    變量指的是程序運(yùn)行時(shí)可變的量,相當(dāng)于開(kāi)辟一塊內(nèi)存空間來(lái)保存一些數(shù)據(jù),類型則是對(duì)變量的種類進(jìn)行了劃分,不同的類型的變量具有不同的特性,這篇文章主要介紹了Java數(shù)據(jù)類型與運(yùn)算符的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • spring boot集成rabbitmq的實(shí)例教程

    spring boot集成rabbitmq的實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于spring boot集成rabbitmq的相關(guān)資料,springboot集成RabbitMQ非常簡(jiǎn)單,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 詳解如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目

    詳解如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目

    本篇文章主要介紹了如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 一文讀懂JAVA中HttpURLConnection的用法

    一文讀懂JAVA中HttpURLConnection的用法

    這篇文章主要介紹了JAVA中的HttpURLConnection用法,文中講解非常細(xì)致,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • SpringBoot項(xiàng)目中Druid自動(dòng)登錄功能實(shí)現(xiàn)

    SpringBoot項(xiàng)目中Druid自動(dòng)登錄功能實(shí)現(xiàn)

    Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,這篇文章主要介紹了SpringBoot項(xiàng)目中Druid自動(dòng)登錄功能實(shí)現(xiàn),需要的朋友可以參考下
    2024-08-08
  • springBoot整合rabbitmq測(cè)試常用模型小結(jié)

    springBoot整合rabbitmq測(cè)試常用模型小結(jié)

    這篇文章主要介紹了springBoot整合rabbitmq并測(cè)試五種常用模型,本文主要針對(duì)前五種常用模型,在spirngboot框架的基礎(chǔ)上整合rabbitmq并進(jìn)行測(cè)試使用,需要的朋友可以參考下
    2022-01-01

最新評(píng)論

伊宁县| 山丹县| 宜宾市| 安国市| 镇原县| 军事| 宁化县| 临颍县| 东港市| 古浪县| 上饶县| 旅游| 鄢陵县| 遂溪县| 双流县| 赞皇县| 浮山县| 扎赉特旗| 耿马| 宁安市| 屯留县| 汪清县| 盖州市| 秭归县| 吴川市| 大余县| 仙居县| 安庆市| 德惠市| 临安市| 陵川县| 元朗区| 高邑县| 古丈县| 宜阳县| 深水埗区| 昌吉市| 太湖县| 鄯善县| 新昌县| 丰原市|