亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中自動(dòng)注入的兩種方式總結(jié)

 更新時(shí)間:2022年10月17日 15:33:18   作者:白胡子永遠(yuǎn)  
Spring的核心技術(shù)IOC(Intorol of Converse控制反轉(zhuǎn))的實(shí)現(xiàn)途徑是DI(dependency Insert依賴注入)。而依賴注入(DI)的實(shí)現(xiàn)方式又有兩種,xml方式和注解方式。本文就來詳細(xì)聊聊這兩個(gè)方式,需要的可以了解一下

1. 前言

Spring的核心技術(shù)IOC(Intorol of Converse控制反轉(zhuǎn))的實(shí)現(xiàn)途徑是DI(dependency Insert依賴注入)。而依賴注入(DI)的實(shí)現(xiàn)方式又有兩種,xml方式和注解方式。如下圖所示:

2. set注入和構(gòu)造注入

set注入和構(gòu)造注入,這兩種方法,是我們?cè)诘谝淮谓佑|Spring的時(shí)候,最先學(xué)習(xí)使用Spring容器創(chuàng)建對(duì)象并賦值的方式。具體的代碼及詳細(xì)解釋我已經(jīng)寫在了我前一篇的文章里,這里的鏈接:點(diǎn)進(jìn)去就能看到很仔細(xì)的set注入和構(gòu)造注入的詳細(xì)介紹和使用方法。

3. 什么情況下要使用自動(dòng)注入

在我們學(xué)習(xí)完set注入和構(gòu)造注入之后,我們可能會(huì)發(fā)現(xiàn),要是某個(gè)類的引用屬性,也是其他類的屬性的時(shí)候,若我們使用大量的使用<propterty name="" ref="">去給其他類的這個(gè)引用屬性賦值,就會(huì)顯得十分的冗余。如下所示:

<beans>
 
<bean id="a" class="">
    <property name="" value=""/>
    <property name="11" ref="22"/> <!-某個(gè)引用類型的屬性是很多其他類的屬性-->
</bean>
 
<bean id="b" class="">
    <property name="" value=""/>
    <property name="11" ref="22"/> <!-某個(gè)引用類型的屬性是很多其他類的屬性-->
</bean>
 
 
<bean id="c" class="">
    <property name="" value=""/>
    <property name="11" ref="22"/><!-某個(gè)引用類型的屬性是很多其他類的屬性-->
</bean>
 
 
<bean id="d" class="">
    <property name="" value=""/>
    <property name="11" ref="22"/><!-某個(gè)引用類型的屬性是很多其他類的屬性-->
</bean>
 
 
</beans>

上面的寫法就很冗余,那么有簡(jiǎn)單的寫法嗎?當(dāng)然有,這種簡(jiǎn)便的方法就是自動(dòng)注入。

4. 自動(dòng)注入之byName

下面緊挨著的代碼就是自動(dòng)注入中的byName方式。

byName自動(dòng)注入的特點(diǎn)就是,在<bean>標(biāo)簽中多寫上了一個(gè)屬性,type="byName"。

<bean id="" class="" type="byName">
    <property name="" value=""/> <!--給基本類型屬性賦值,不能使用byName自動(dòng)注入-->
    <property name="" ref=""/>  <!--引用類型屬性賦值,可以使用byName自動(dòng)注入,進(jìn)而實(shí)現(xiàn)簡(jiǎn)寫-->
</bean>
 

byName自動(dòng)注入的使用要求:

必須依賴set()方法,也就是說只支持對(duì)set注入方式的簡(jiǎn)寫。

<bean>
    <property name="" value=""/>
    <property name="" ref=""/>
</bean>

 不支持構(gòu)造注入。

<bean>
    <constructor-arg name="" value=""/>
</bean>

且只支持為引用類型屬性賦值的時(shí)候使用byName的方式實(shí)現(xiàn)給引用類型屬性賦值;給簡(jiǎn)單類型的屬性賦值,不能使用byName這種構(gòu)造注入,需要正常寫。

那么在給引用類型的屬性賦值的時(shí)候,使用了byName自動(dòng)注入,那么我們便可以不寫<property name="" ref="">。那byName是如何實(shí)現(xiàn)給給引用類型屬性賦值的呢?

答案是:當(dāng)Spring發(fā)現(xiàn)你使用了byName這種自動(dòng)注入的時(shí)候,它會(huì)自動(dòng)去尋找當(dāng)前<bean>標(biāo)簽的class類,并去查看該類的引用屬性有哪些,然后去當(dāng)前xml文件中,去比對(duì)尋找是否有其他的<bean>標(biāo)簽的id等于該類的引用屬性名,和其他<bean>標(biāo)簽的class屬性值是否跟當(dāng)前要賦值的引用屬性的類是否一致。若是id和class都匹配上了,那么就會(huì)為該引用類型屬性賦值。

5. 自動(dòng)注入之byType注入

下面緊挨著的代碼就是自動(dòng)注入中的byType方式。

byType自動(dòng)注入的特點(diǎn)就是,在<bean>標(biāo)簽中多寫上了一個(gè)屬性,type="byType"。byType自動(dòng)注入的方式,跟byName的使用方法和要求幾乎一模一樣,只是在匹配賦值的時(shí)候,略有差別。

<bean id="" class="" type="byType">
    <property name="" value=""/> <!--給基本類型屬性賦值,不能使用byType自動(dòng)注入,需要正常寫-->
    <property name="" ref=""/>  <!--引用類型屬性賦值,可以使用byType自動(dòng)注入,進(jìn)而實(shí)現(xiàn)簡(jiǎn)寫-->
</bean>
 
<!---->

byType自動(dòng)注入的使用要求:

必須依賴set方法,因此必須是對(duì)set注入方法的簡(jiǎn)寫

支持set注入:如下所示

<bean>
    <property name="" value=""/>
    <property name="" ref=""/>
</bean>

不支持構(gòu)造注入:如下所示

<bean>
    <constructor-arg name="" value=""/>
</bean>

只支持給set注入中的引用類型屬性賦值時(shí)候簡(jiǎn)寫,不支持給set注入中的簡(jiǎn)單類型賦值,(給set注入中的簡(jiǎn)單類型賦值,仍需要正常寫)如下所示

<bean id="" class="">
    <property name="" value=""/> <!--給基本類型屬性賦值,不能使用byType自動(dòng)注入,需要正常寫-->
    <property name="" ref=""/>  <!--引用類型屬性賦值,可以使用byType自動(dòng)注入,進(jìn)而實(shí)現(xiàn)簡(jiǎn)寫-->
</bean>

那么但給引用類型的屬性賦值的時(shí)候,使用了byType自動(dòng)注入,那么我們便可以不寫<property name="" ref="">。那byType是如何實(shí)現(xiàn)給給引用類型屬性賦值的呢?

答案是:Spring在見到byType自動(dòng)注入的時(shí)候,會(huì)自動(dòng)匹配其他的<bean>標(biāo)簽的class是否跟當(dāng)前要?jiǎng)?chuàng)建的對(duì)象的引用類型屬性是否是,子類,或者是接口實(shí)現(xiàn)類。若是則就會(huì)自動(dòng)將匹配上的引用類型的值賦值給當(dāng)前創(chuàng)建對(duì)象的引用類型屬性。

?。∽⒁猓。。?/p>

由于Spring是單例模式,所以在使用自動(dòng)注入給引用類型的屬性匹配的<bean>標(biāo)簽的時(shí)候,若是匹配上了兩個(gè)<bean>標(biāo)簽就會(huì)報(bào)錯(cuò)。

到此這篇關(guān)于Spring中自動(dòng)注入的兩種方式總結(jié)的文章就介紹到這了,更多相關(guān)Spring自動(dòng)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式實(shí)例

    SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式實(shí)例

    最近在項(xiàng)目開發(fā)中,需要為一個(gè)使用MySQL數(shù)據(jù)庫(kù)的SpringBoot項(xiàng)目,新添加一個(gè)PLSQL數(shù)據(jù)庫(kù)數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2022-04-04
  • spring?@Primary-在spring中的使用方式

    spring?@Primary-在spring中的使用方式

    這篇文章主要介紹了spring?@Primary-在spring中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-01-01
  • Spring容器刷新obtainFreshBeanFactory示例詳解

    Spring容器刷新obtainFreshBeanFactory示例詳解

    這篇文章主要為大家介紹了Spring容器刷新obtainFreshBeanFactory示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā))

    MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā))

    這篇文章主要介紹了MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā)),并對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Java使用數(shù)組實(shí)現(xiàn)ArrayList的動(dòng)態(tài)擴(kuò)容的方法

    Java使用數(shù)組實(shí)現(xiàn)ArrayList的動(dòng)態(tài)擴(kuò)容的方法

    這篇文章主要介紹了Java使用數(shù)組實(shí)現(xiàn)ArrayList的動(dòng)態(tài)擴(kuò)容的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • JAVA實(shí)現(xiàn)雙邊決策的示例

    JAVA實(shí)現(xiàn)雙邊決策的示例

    本篇文章主要介紹了JAVA實(shí)現(xiàn)雙邊決策,介紹了雙邊決策的實(shí)現(xiàn)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • Hibernate多對(duì)一單項(xiàng)關(guān)聯(lián)

    Hibernate多對(duì)一單項(xiàng)關(guān)聯(lián)

    這篇文章主要介紹了Hibernate多對(duì)一單項(xiàng)關(guān)聯(lián),需要的朋友可以參考下
    2017-09-09
  • Java實(shí)戰(zhàn)之兼職平臺(tái)系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之兼職平臺(tái)系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Java編寫一個(gè)兼職平臺(tái)系統(tǒng),采用到的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf等,感興趣的小伙伴可以了解一下
    2022-03-03
  • 使用svn管理Maven項(xiàng)目的方法步驟

    使用svn管理Maven項(xiàng)目的方法步驟

    這篇文章主要介紹了使用svn管理Maven項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot實(shí)現(xiàn)簡(jiǎn)單的日志鏈路追蹤

    SpringBoot實(shí)現(xiàn)簡(jiǎn)單的日志鏈路追蹤

    隨著分布式應(yīng)用的普及,現(xiàn)在的一些應(yīng)用系統(tǒng)不再像以前,所有的文件(前后端程序)都打包在一個(gè)包中,本文通過一個(gè)簡(jiǎn)單的SpringBoot應(yīng)用來總結(jié),我們?nèi)绾螌⑷罩敬?lián)起來,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10

最新評(píng)論