1. 程式人生 > >Spring IOC 和 DI

Spring IOC 和 DI

找到 pen spring prop 基本 lis zh-cn mat 方法註入

(1)什麽是IOC(Inversion Of Control 控制反轉)?

對象之間的依賴關系應該由容器來建立。

(2)什麽是DI(Dependency Injection 依賴註入)?

容器可以通過調用set方法或者構造器來建立對象之間的依賴關系。

註:IOC是目標,DI是手段。

(3)使用set方法來註入

配置set方法註入。property元素的name屬性用於指定set方法名(首字母大寫,前面添加set),ref屬性用於指定被註入的bean的id。

<bean id="a1" class="ioc.A">

  <property name="b" ref="b1"/>

</bean>

技術分享圖片

(4)使用構造器來註入

<bean id="wt1" class="ioc.Waiter"/>

配置構造器註入。constructor-arg的index屬性用來指定參數的下標,ref屬性用來指定被註入的bean的id。

<bean id="rest1" class="ioc.Restaurant">

  <constructor-arg index="0" ref="wt1"/>

</bean>

(5)自動裝配

a.自動裝配指的是,容器按照某種規則,自動建立對象之間的依賴關系。

即不用明確指定被註入的bean的id,容器底層仍然需要調用set方法或者構造器來完成依賴關系的建立。

b.容器默認情況下,是不會自動裝配的。

<bean id="eg1" class="autowire.Enginee"/>

autowire屬性用於指定自動裝配的方式,有三個值:

byName: 容器以屬性名作為beanid來查找對應的bean,找到之後,調用set方法來完成註入。

註:如果找不到對應的bean,則不註入。

byType:容器以屬性類型作為bean的類型來查找對應的bean,找到之後,調用set方法來完成註入。

註:如果找不到對應的bean,則不註入。如果找到多個,則會出錯。

constructor:類似byType,只不過調用構造器來完成註入。

<bean id="car" class="autowire.Car" autowire="byType"/>

(6)註入基本類型的值

註入基本類型的值(包括String),使用value屬性。


註入基本類型的值(包括String),使用value屬性。

<bean id="vb1" class="value.ValueBean">
    <property name="name" value="花花"/>
    <property name="age" value="20"/>
</bean>

(7)註入集合類型的值

    <bean id="vb1" class="value.ValueBean">
        <property name="name" value="花花"/>
        <property name="age" value="20"/>
        <property name="interest">
            <list>
                <value>釣魚</value>
                <value>做飯</value>
                <value>看電視</value>
                <value>看電視</value>
            </list>
        </property>
        <property name="city">
            <set>
                <value>北京</value>
                <value>洛陽</value>
                <value>南京</value>
            </set>
        </property>
        <property name="score">
            <map>
                <entry key="english" value="60"/>
                <entry key="math" value="1"/>
            </map>
        </property>
        <property name="db">
            <props>
                <prop key="username">Tom</prop>
                <prop key="password">1234</prop>
            </props>
        </property>
    </bean>

(8)引用的方式註入集合類型的值

    <util:list id="interestBean">
        <value>抽煙</value>
        <value>喝酒</value>
        <value>燙頭</value>
    </util:list> 
    <util:set id="cityBean">
        <value>長沙</value>
        <value>嶽陽</value>
        <value>華容</value>
    </util:set>
    <util:map id="scoreBean">
        <entry key="english" value="90"/>
        <entry key="math" value="80"/>
    </util:map>
    <util:properties id="dbBean">
        <prop key="username">Sally</prop>
        <prop key="password">test</prop>
    </util:properties>
    <bean id="vb2" class="value.ValueBean">
        <property name="interest" ref="interestBean"/>
        <property name="city" ref="cityBean"/>
        <property name="score" ref="scoreBean"/>
        <property name="db" ref="dbBean"/>
    </bean>

(9)讀取properties文件的內容

讀取.properties文件的內容。location屬性指定properties文件的位置,容器會讀取指定文件的內容,然後將這些內容添加到了Properties對象裏面。

<util:properties id="config" location="classpath:config.properties"/>

(10)Spring表達式

技術分享圖片

Spring IOC 和 DI