DI

自動裝配

自動裝配的意思是我們無需指定由哪一個bean來裝配,spring會按照我們指定的規則去尋找相應的bean,自動裝配有4種類型:

  • byName:如果某個bean的ID與property的名字一樣,則這個bean就會自動裝配;

  • byType:如果某個bean的類型與property的類型一致,則這個bean會被自動裝配;

  • constructor:假設通過構造器注入來裝配bean,我們讓spring在應用上下文中自動選擇與入參類型相同的Bean注入到構造器參數中

  • autodetect:Spring首先嚐試constructor自動裝配,如果沒有發現與構造器相匹配的Bean,Spring會嘗試使用byType自動裝配。

注意,前兩者是針對要裝配的bean的所有property而言的,當然我們也可以爲某個property提供獨特的裝配方案,而constructor則不行,我們不能爲某個構造器入參提供獨特的裝配方案,假設我們有一個類Teacher引用了Student類:

2、懶加載

   

 延遲初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用時才創建及初始化Bean。

       配置方式很簡單隻需在<bean>標籤上指定 “lazy-init” 屬性值爲“true”即可延遲初始化Bean。


Spring容器會在創建容器時提前初始化“singleton”作用域的Bean,“singleton”就是單例的意思即整個容器每個Bean只有一個實例,後邊會詳細介紹。Spring容器預先初始化Bean通常能幫助我們提前發現配置錯誤,所以如果沒有什麼情況建議開啓,除非有某個Bean可能需要加載很大資源,而且很可能在整個應用程序生命週期中很可能使用不到,可以設置爲延遲初始化。

  

3、依賴注入 

     在此配置中,resourceBean初始化在dependentBean之前被初始化,resourceBean銷燬會在dependentBean銷燬之後執行。


   銷燬之前 關閉鉤子

  但,如果你正在一個非web應用的環境下使用Spring的IoC容器,如dubbo服務,你想讓容器優雅的關閉,並調用singleton的bean相應destory回調方法,你需要在JVM裏註冊一個“關閉鉤子”(shutdown hook)。這一點非常容易做到,並且將會確保你的Spring IoC容器被恰當關閉,以及所有由單例持有的資源都會被釋放。


4、

  <!-- 通過構造器參數索引方式依賴注入 -->

   

<bean id="byIndex" class="cn.javass.spring.chapter3.HelloImpl3">

        <constructor-arg index="0" value="Hello World!"/>

   <constructor-arg index="1" value="1"/>

</bean> 


    @java.beans.ConstructorProperties({"message", "index1"})

    public HelloImpl3(String message, int index1) {

        this.message = message;

        this.index1 = index1;

    }

    

    @Override

    public void sayHello() {

        System.out.println(index1 + ":" + message);

    }




靜態工廠類

   <!-- 通過靜態工廠參數索引方式依賴注入 -->

<bean id="byIndex" class="cn.javass.spring.chapter3.DependencyInjectByStaticFactory" factory-method="newInstance">

    <constructor-arg index="0" value="Hello World!"/>

   <constructor-arg index="1" value="1"/>

</bean> 



實例工廠類

  <bean id="instanceFactory" class="cn.javass.spring.chapter3.DependencyInjectByInstanceFactory"/>

    

    <!-- 通過實例工廠參數索引方式依賴注入 -->

<bean id="byIndex" factory-bean="instanceFactory" factory-method="newInstance">

    <constructor-arg index="0" value="Hello World!"/>

   <constructor-arg index="1" value="1"/>

</bean> 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章