Spring IOC 1

1.spring bean的xml配置裏name或id均可以指定它們中的一個時都做爲「標識符」,那爲何還要有id和name同時存在呢?java

    這是由於當使用基於XML的配置元數據時,在XML中id是一個真正的XML id屬性,所以當其餘的定義來引用這個id時就體現出id的好處了,能夠利用XML解析器來驗證引用的這個id是否存在,從而更早的發現是否引用了一個不存在的bean,而使用name,則可能要在真正使用bean時才能發現引用一個不存在的bean。spring

2.Spring IoC容器中根據Bean定義建立Bean主要有3種方式:xml

    A.使用構造器實例化Bean;索引

<!-- 使用空構造器進行定義-->資源

<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/> get

 

<!-- 指定構造器參數 index表示位置,value表示常量值,也能夠指定引用,指定引用使用ref來引用另外一個Bean定義--> class

<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">   容器

     <constructor-arg index="0" value="Hello Spring!"/>  配置

</bean> 依賴注入

    B.使用靜態工廠方式實例化Bean;使用這種方式除了指定必須的class屬性,還要指定factory-method屬性來指定實例化Bean的方法,並且使用靜態工廠方法也容許指定方法參數.

public class HelloApiStaticFactory {                                  //靜態工廠類代碼

       public static HelloApi newInstance(String message) {  //工廠方法  

           return new HelloImpl2(message);                       //返回須要的Bean實例  

}  }  

<!-- 使用靜態工廠方法定義bean -->  

<bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" 

factory-method="newInstance">  

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

</bean>  

 

    C.使用實例工廠方法實例化Bean。使用這種方式不能指定class屬性,此時必須使用factory-bean屬性來指定工廠Bean,factory-method屬性指定實例化Bean的方法,並且使用實例工廠方法容許指定方法參數,方式和使用構造器方式同樣。

public class HelloApiInstanceFactory {          //實例工廠類代碼

    public HelloApi newInstance(String message) {  

          return new HelloImpl2(message);  

   }  }  

<!—一、定義實例工廠Bean -->  

<bean id="beanInstanceFactory"  class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/>  

<!—二、使用實例工廠Bean建立Bean -->  

<bean id="bean4"  factory-bean="beanInstanceFactory"  factory-method="newInstance">  

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

</bean>  

這三種方式只是配置不同,從獲取方式看徹底同樣,沒有任何不一樣。

 

3.Spring IoC容器注入依賴資源主要有如下三種基本實現方式:

    構造器注入:就是容器實例化Bean時注入那些依賴,經過在在Bean定義中指定構造器參數進行注入依賴,包括實例工廠方法參數注入依賴,但靜態工廠方法參數不容許注入依賴;

    1、根據參數索引注入,使用標籤「<constructor-arg index="1" value="1"/>」來指定注入的依賴,其中「index」表示索引,從0開始,即第一個參數索引爲0,「value」來指定注入的常量值

    2、根據參數類型進行注入,使用標籤「<constructor-arg type="java.lang.String" value="Hello World!"/>」來指定注入的依賴,其中「type」表示須要匹配的參數類型,能夠是基本類型也能夠是其餘類型,如「int」、「java.lang.String」,「value」來指定注入的常量值

    3、根據參數名進行注入,使用標籤「<constructor-arg name="message" value="Hello World!"/>」來指定注入的依賴,其中「name」表示須要匹配的參數名字,「value」來指定注入的常量值

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

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

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

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

</bean>  

<!-- 經過構造器參數類型方式依賴注入 -->  

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

   <constructor-arg type="java.lang.String" value="Hello World!"/>  

   <constructor-arg type="int" value="2"/>  

</bean>  

<!-- 經過構造器參數名稱方式依賴注入 -->  

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

   <constructor-arg name="message" value="Hello World!"/>  

   <constructor-arg name="index" value="3"/>  

</bean>  

     方法注入:能經過配置方式替換掉Bean方法,也就是經過配置改變Bean方法 功能。

        靜態工廠方法注入和實例工廠注入.

     setter注入:經過setter方法進行注入依賴;

        setter注入,是經過在經過構造器、靜態工廠或實例工廠實例好Bean後,經過調用Bean類的setter方法進行注入依賴. 在Bean的配置中增長property。

        Spring如何知道setter方法?如何將值注入進去的呢?其實方法名是要遵照約定的,setter注入的方法名要遵循「JavaBean getter/setter 方法命名約定」。

相關文章
相關標籤/搜索