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

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

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

1. 前言

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

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

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

3. 什么情況下要使用自動注入

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

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

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

4. 自動注入之byName

下面緊挨著的代碼就是自動注入中的byName方式。

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

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

byName自動注入的使用要求:

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

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

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

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

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

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

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

5. 自動注入之byType注入

下面緊挨著的代碼就是自動注入中的byType方式。

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

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

byType自動注入的使用要求:

必須依賴set方法,因此必須是對set注入方法的簡寫

支持set注入:如下所示

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

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

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

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

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

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

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

?。∽⒁猓。。?/p>

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

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

相關(guān)文章

  • springboot結(jié)合maven配置不同環(huán)境的profile方式

    springboot結(jié)合maven配置不同環(huán)境的profile方式

    這篇文章主要介紹了springboot結(jié)合maven配置不同環(huán)境的profile方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java基礎(chǔ)鞏固小項目點菜系統(tǒng)的實現(xiàn)

    Java基礎(chǔ)鞏固小項目點菜系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了一個Java小項目點菜系統(tǒng)的實現(xiàn),主要是用的集合,適合正在學(xué)習(xí)Java的朋友拿來實戰(zhàn)練手,感興趣的朋友快來看看吧
    2022-03-03
  • 如何使用Java?8中DateTimeFormatter類型轉(zhuǎn)換日期格式詳解

    如何使用Java?8中DateTimeFormatter類型轉(zhuǎn)換日期格式詳解

    這篇文章主要介紹了如何使用Java?8中DateTimeFormatter類型轉(zhuǎn)換日期格式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java 配置log 將日志信息輸出到指定日志文件中

    Java 配置log 將日志信息輸出到指定日志文件中

    這篇文章主要介紹了Java 配置log 將日志信息輸出到指定日志文件中,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • @FeignClient注入找不到異常如何解決

    @FeignClient注入找不到異常如何解決

    這篇文章主要介紹了@FeignClient注入找不到異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • maven如何使用profiles多環(huán)境配置

    maven如何使用profiles多環(huán)境配置

    在軟件開發(fā)過程中,我們經(jīng)常需要在不同的環(huán)境中部署和運行我們的應(yīng)用程序,例如開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境,為了方便管理和配置不同環(huán)境下的參數(shù),我們可以使用Maven的profiles功能,本文給大家介紹maven如何使用profiles多環(huán)境配置,感興趣的的朋友一起看看吧
    2024-02-02
  • Java中八大包裝類舉例詳解(通俗易懂)

    Java中八大包裝類舉例詳解(通俗易懂)

    這篇文章主要介紹了Java中的包裝類,包括它們的作用、特點、用途以及如何進行裝箱和拆箱,包裝類還提供了許多實用方法,如轉(zhuǎn)換、獲取基本類型值、比較和類型檢測,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 使用注解@Validated和BindingResult對入?yún)⑦M行非空校驗方式

    使用注解@Validated和BindingResult對入?yún)⑦M行非空校驗方式

    這篇文章主要介紹了使用注解@Validated和BindingResult對入?yún)⑦M行非空校驗方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 使用Lombok子類繼承父類,父類屬性不生效問題及解決

    使用Lombok子類繼承父類,父類屬性不生效問題及解決

    在使用Lombok庫時,若子類繼承父類,父類的屬性可能不會自動生效,為解決此問題,可通過在父類上添加@Getter和@Setter注解,或使用@SuperBuilder注解來確保父類屬性在子類中有效,同時,需注意確保Lombok版本一致且正確配置了相關(guān)插件
    2024-10-10
  • 在IntelliJ?IDEA中配置SSH服務(wù)器開發(fā)環(huán)境并實現(xiàn)固定地址遠(yuǎn)程連接的操作方法

    在IntelliJ?IDEA中配置SSH服務(wù)器開發(fā)環(huán)境并實現(xiàn)固定地址遠(yuǎn)程連接的操作方法

    本文主要介紹如何在IDEA中設(shè)置遠(yuǎn)程連接服務(wù)器開發(fā)環(huán)境,并結(jié)合Cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)無公網(wǎng)遠(yuǎn)程連接,然后實現(xiàn)遠(yuǎn)程Linux環(huán)境進行開發(fā),本例使用的是IDEA2023.2.5版本,感興趣的朋友跟隨小編一起看看吧
    2024-01-01

最新評論

临汾市| 喜德县| 城固县| 沂水县| 邵东县| 遵化市| 新民市| 收藏| 灵璧县| 广宁县| 嘉义市| 鲁甸县| 贵阳市| 淮北市| 女性| 子长县| 永丰县| 搜索| 万盛区| 逊克县| 大关县| 射阳县| 丹江口市| 民乐县| 蕲春县| 太和县| 中山市| 余姚市| 厦门市| 仁寿县| 灵台县| 南投县| 军事| 兴城市| 永泰县| 龙口市| 万盛区| 田阳县| 永年县| 唐山市| 拉萨市|