Spring基礎05——Spring依賴注入的三種方式

Spring支持3種依賴注入的方式:屬性注入、構造器注入、工廠java

1.屬性注入less

屬性注入即經過setter方法注入Bean的屬性或依賴的對象。使用<property>元素,使用name屬性指定Bean的屬性名稱,value 屬性或<value>子節點指定屬性值函數

,是實際應用當中最經常使用的注入方式。spa

<!--配置Bean-->
    <bean id="helloWorld" class="com.wzy.lesson1.HelloWorld">
        <!--經過setName方法注入-->
        <property name="name" value="Spring"/>
    </bean>

 

2.構造器注入code

經過構造方法注入Bean的屬性值或依賴的對象,它保證了Bean實例化後就能夠使用。對象

構造器注入在<constructor-arg>元素裏聲明屬性,<constructor-arg>中沒有name屬性。blog

1 <!--經過構造方法來配置bean的屬性-->
2     <bean id="car" class="com.wzy.lesson1.Car">
3         <constructor-arg value="Audi" index="0"/>
4         <constructor-arg value="ShangHai" index="1"/>
5         <constructor-arg value="3000000" index="2"/>
6     </bean>

若是構造方法的參數個數相同,而且只指定了參數的順序沒有指定參數的類型,那麼容器將沒法區分應使用哪一個構造器,就會形成錯誤。class

 1 <!--經過構造方法來配置bean的屬性-->
 2 <bean id="car" class="com.wzy.lesson1.Car">
 3     <constructor-arg value="Audi" index="0"/>
 4     <constructor-arg value="ShangHai" index="1"/>
 5     <constructor-arg value="3000000" index="2"/>
 6 </bean>
 7 
 8 <!--經過構造方法來配置bean的屬性-->
 9 <bean id="car1" class="com.wzy.lesson1.Car">
10     <constructor-arg value="Audi" index="0"/>
11     <constructor-arg value="ShangHai" index="1"/>
12     <constructor-arg value="200" index="2" />
13 </bean>

由於沒有指定類型因此容器都使用了,第一個構造方法進行注入,致使原本的maxSpeed屬性值注入到price當中容器

 

在注入時咱們指定注入的參數類型,來避免構造函數重載時,發生這種錯誤:配置

 1 <!--經過構造方法來配置bean的屬性-->
 2 <bean id="car" class="com.wzy.lesson1.Car">
 3     <constructor-arg value="Audi" index="0" type="java.lang.String"/>
 4     <constructor-arg value="ShangHai" index="1" type="java.lang.String"/>
 5     <constructor-arg value="3000000" index="2" type="double"/>
 6 </bean>
 7 
 8 <!--經過構造方法來配置bean的屬性-->
 9 <bean id="car1" class="com.wzy.lesson1.Car">
10     <constructor-arg value="Audi" index="0" type="java.lang.String"/>
11     <constructor-arg value="ShangHai" index="1" type="java.lang.String"/>
12     <constructor-arg value="200" index="2" type="int"/>
13 </bean>

這樣咱們就能夠獲得正確的結果:

 

3.工廠方法注入(不多使用,不推薦)

相關文章
相關標籤/搜索