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

Spring中依賴注入(DI)幾種方式解讀

 更新時間:2024年01月16日 09:45:12   作者:加油當(dāng)當(dāng)  
這篇文章主要介紹了Spring中依賴注入(DI)幾種方式解讀,構(gòu)造器依賴注入通過容器觸發(fā)一個類的構(gòu)造器來實現(xiàn)的,該類有一系列參數(shù),每個參數(shù)代表一個對其他類的依賴,需要的朋友可以參考下

Spring依賴注入(DI)

構(gòu)造器注入

  1. 構(gòu)造器依賴注入通過容器觸發(fā)一個類的構(gòu)造器來實現(xiàn)的,該類有一系列參數(shù),每個參數(shù)代表一個對其他類的依賴。【一般不用】
  2. 在構(gòu)造調(diào)用者實例的同時,在構(gòu)造方法中給屬性賦值,完成被調(diào)用者的實例化。即,使用構(gòu)造器設(shè)置依賴關(guān)系;
  3. 優(yōu)點:對象初始化完成后便可獲得可使用的對象;
  4. 缺點:當(dāng)需要注入的對象很多時,構(gòu)造器參數(shù)列表將會很長;不夠靈活。若有多種注入方式,每種方式只需注入指定幾個依賴,那么就需要提供多個重載的構(gòu)造函數(shù),麻煩;
  5. Spring容器會將每一個正在創(chuàng)建的 Bean 標(biāo)識符放在一個"當(dāng)前創(chuàng)建 Bean 池"中,Bean 標(biāo)識符在創(chuàng)建過程中將一直保持在這個池中,因此如果在創(chuàng)建 Bean 過程中發(fā)現(xiàn)自己已經(jīng)在"當(dāng)前創(chuàng)建 Bean 池"里時將拋出BeanCurrentlyInCreationException異常表示循環(huán)依賴;而對于創(chuàng)建完畢的 Bean 將從"當(dāng)前創(chuàng)建 Bean 池"中清除掉;
  6. <constructor-arg> 標(biāo)簽:一個<constructor-arg>表示構(gòu)造方法一個參數(shù);
  7. <constructor-arg> 標(biāo)簽屬性:
    • name:表示構(gòu)造方法的形參名;
    • index:表示構(gòu)造方法的參數(shù)的位置,參數(shù)從左往右位置是 0,1,2 的順序;
    • value:構(gòu)造方法的形參類型是簡單類型的,使用value;
    • ref:構(gòu)造方法的形參類型是引用類型的,使用ref;
  8. 代碼示例:
public Student(String myname,int myage,School myXueXiao){
System.out.print1n( "student的有參數(shù)構(gòu)造方法");
this.name = myname;
this.age = myage;
this.school= myXueXiao;
}
 
<!--使用name屬性實現(xiàn)構(gòu)造注入-->
<bean id="myStudent" class="com.bit.ba03.Student" >
<constructor-arg name="myage" value="20" />
<constructor-arg name="mySchool" ref="myXueXiao" />
<constructor-arg name="myname" value="周良"/>
</bean>
<!--使用index屬性-->
<bean id="myStudent2" class="com.bit.ba03.Student">
<constructor-arg index="1" value="22" />
<constructor-arg index="0" value="李四" />
<constructor-arg index="2" ref="myXueXiao" />
</bean>
<!--省略index,順序不能亂寫了-->
<bean id="myStudent3" class="com.bit.ba03.Student">
<constructor-arg value="張強強" />
<constructor-arg value="22" />
<constructor-arg ref="myXueXiao" />
</bean>

setter方法注入

  1. Setter方法注入是容器通過調(diào)用無參構(gòu)造器或無參static工廠方法實例化bean之后,調(diào)用該bean的setter方法,即實現(xiàn)了基于setter的依賴注入;
  2. IOC Service Provider 通過調(diào)用成員變量提供的setter函數(shù)將被依賴對象注入給依賴類;
  3. 優(yōu)點:靈活??梢赃x擇性地注入需要的對象;
  4. 缺點:依賴對象初始化完成后由于尚未注入被依賴對象,因此還不能使用;

簡單類型的set注入

  • 簡單類型: spring中規(guī)定java的基本數(shù)據(jù)類型和String都是簡單類型;
  • set屬性會調(diào)用屬性中的set方法進(jìn)行賦值,屬性是been中指定類中的屬性所以要求類中必須有set方法;
  • 先執(zhí)行構(gòu)造方法創(chuàng)建對象,然后執(zhí)行set方法進(jìn)行賦值;
  • 代碼:
public class Id {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
<bean id="xx" class="yyy.Id">
<property name="屬性名字" value="此屬性的值"/>
一個property只能給一個屬性賦值
<property....>
</bean>

引用類型set注入

  • 當(dāng)指定 bean 的某屬性值為另一 bean 的實例時,通過 ref 指定它們間的引用關(guān)系。ref 的值必須為某 bean 的 id 值;
  • set屬性會調(diào)用屬性中的set方法進(jìn)行賦值,屬性是been中指定類中的屬性所以要求類中必須有set方法;
  • 先執(zhí)行構(gòu)造方法創(chuàng)建對象,然后執(zhí)行set方法進(jìn)行賦值;
<bean id="xxx" class="yyy">
<property name="屬性名稱" ref="bean的id(對象的名稱)" />
</bean>

代碼:

public class student{
private string name;private int age;
private school school;
// setter
// toString()
}
<bean id="myStudent" class="com.bit.ba02.Student">
<!--引用類型的屬性賦值–->
<property name="school" ref="mySchool" />〈!-- setSchool(mySchool) -->
</bean>

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

相關(guān)文章

  • Javassist如何操作Java 字節(jié)碼

    Javassist如何操作Java 字節(jié)碼

    這篇文章主要介紹了Javassist如何操作Java 字節(jié)碼,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • 如何解決TCP?socket的阻塞問題

    如何解決TCP?socket的阻塞問題

    這篇文章主要介紹了如何解決TCP?socket的阻塞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java如何從Redis中批量讀取數(shù)據(jù)

    Java如何從Redis中批量讀取數(shù)據(jù)

    這篇文章主要介紹了Java如何從Redis中批量讀取數(shù)據(jù)的情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 淺談Spring中單例Bean是線程安全的嗎

    淺談Spring中單例Bean是線程安全的嗎

    這篇文章主要介紹了淺談Spring中單例Bean是線程安全的嗎?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 使用Spring Event實現(xiàn)內(nèi)部模塊間的輕松解耦

    使用Spring Event實現(xiàn)內(nèi)部模塊間的輕松解耦

    Spring Event 是 Spring 框架提供的一個核心組件,其允許服務(wù)內(nèi)部不同模塊之間通過觀察者模式(發(fā)布-訂閱模式)進(jìn)行通信,從而實現(xiàn)模塊間的解耦,本文給大家介紹了如何使用 Spring Event 實現(xiàn)內(nèi)部模塊間的輕松解耦,需要的朋友可以參考下
    2025-08-08
  • Springboot如何使用外部yml啟動

    Springboot如何使用外部yml啟動

    這篇文章主要介紹了Springboot如何使用外部yml啟動問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java通俗易懂系列設(shè)計模式之建造者模式

    Java通俗易懂系列設(shè)計模式之建造者模式

    這篇文章主要介紹了Java通俗易懂系列設(shè)計模式之建造者模式,對設(shè)計模式感興趣的讀者,一定要看一下
    2021-04-04
  • Java中的Stream流與IO流完整實戰(zhàn)指南(從零掌握)

    Java中的Stream流與IO流完整實戰(zhàn)指南(從零掌握)

    本文詳細(xì)介紹了Java中的Stream流和IO流的使用方法,包括它們的基本概念、核心API、適用場景以及如何正確關(guān)閉資源,通過多個實戰(zhàn)案例,幫助讀者掌握這些核心技能,提高Java開發(fā)效率,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Java實現(xiàn)單例模式的五種方法介紹

    Java實現(xiàn)單例模式的五種方法介紹

    單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。在計算機系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅(qū)動程序?qū)ο蟪1辉O(shè)計成單例
    2023-01-01
  • Spring中的監(jiān)聽器SpringApplicationRunListener詳解

    Spring中的監(jiān)聽器SpringApplicationRunListener詳解

    這篇文章主要介紹了Spring中的監(jiān)聽器SpringApplicationRunListener詳解,命名我們就可以知道它是一個監(jiān)聽者,分析springboot啟動流程我們會發(fā)現(xiàn),它其實是用來在整個啟動流程中接收不同執(zhí)行點事件通知的監(jiān)聽者,需要的朋友可以參考下
    2023-11-11

最新評論

稷山县| 隆子县| 澎湖县| 昭平县| 明光市| 湾仔区| 岳池县| 永昌县| 皋兰县| 屯门区| 安徽省| 沾化县| 永靖县| 印江| 五寨县| 武川县| 牡丹江市| 柞水县| 梁河县| 普格县| 古丈县| 绵竹市| 施甸县| 宜城市| 抚州市| 安溪县| 白城市| 阿鲁科尔沁旗| 黎城县| 山阴县| 那曲县| 防城港市| 本溪| 旬邑县| 壤塘县| 安阳市| 安陆市| 香港 | 仙游县| 泰州市| 阳高县|