Spring中bean的基本xml配置

來源:互聯網
上載者:User
xml

  在spring容器內拼湊bean叫作裝配。裝配bean的時候,你是在告訴容器,需要哪些bean,以及容器如何使用依賴注入將它們配合在一起。
    理論上,bean裝配可以從任何資源獲得,包括屬性檔案,關聯式資料庫等,但xml是最常見的spring 應用系統配置源。Spring中的幾種容器都支援使用xml裝配bean,包括:
    XmlBeanFactory ,
    ClassPathXmlApplicationContext ,
    FileSystemXmlApplicationContext ,
    XmlWebApplicationContext

    基本的xml配置包括如下幾個方面:
   
    1.添加一個bean
    2.設定bean的屬性
        2.1 手動設定
            2.1.1 通過Setter方法
            2.1.2 通過構造器
        2.2 自動化佈建
    其中bean的屬性即為bean裡的成員變數,這些成員變數值的獲得可以通過setter方法,例如某個屬性為name,則setter方法為setName(String name);或者通過構造器在類被執行個體化時初始化。Setter方法(例如setName方法)或者構造器的調用都可以通過在xml檔案裡進行配置,從而實現讓spring容器來自動進行。

1.添加一個bean
    以下是一個例子:
    <bean
        id = “mybean”
        Class = “blog.spring.MyBean”
        Singleton = “false”
        init-method = “initMethod”
        destroy-method = “destroyMethod”
        autowire = “autowire type”
    />
    下面是對該標籤裡各個屬性的解釋:
    Id : 標識該bean的名稱,通過factory.getBean(“id”)來獲得執行個體。
    Class : 該bean的類路徑。
    Singleton : 預設為true,即單一實例模式,每次getBean(“id”)時擷取的都是同
一個執行個體,如果設定為false,即原型模式,則每次擷取的是新建立
的執行個體。
    Init-method : 在bean執行個體化後要調用的方法(bean裡定義好的方法)。
    Destroy-method : bean從容器裡刪除之前要調用的方法。
    Autowire : 其屬性要通過何種方法進行屬性的自動裝配。
    對於上述的各個屬性,id和class是必要的,其他的則可以省略。例如如果設定了autowire的值,則表明需要自動裝配,否則是手動裝配。

2.通過Setter方法手動設定bean裡的屬性
    Bean裡的屬性通過<property>標籤來標識。有以下幾種情況:
    ● 簡單類型屬性
        <bean id = “mybean” class = “blog.spring.MyBean”>
            <property name = “name”>
                <value>springTest</value>
            </property>
        </bean>
    ● 引用其他bean
        <bean id = “mybean” class = “blog.spring.MyBean” />
        <bean id = “mybean1” class = “blog.spring.MyBean1”>
            <property name = “name”>
                <ref bean = “mybean” />
            </property>
        </bean>
也可以將<ref>改為
    <bean class = “..”>
這樣叫做內部bean,缺點是無法在其他地方重用這個bean的執行個體。
    ● 裝配集合
        共有以下幾種集合的裝配:
    ****裝配List和數組****
        <property name = ”nameList”>
            <list>
                <value>something</value>
                <ref bean = “blog.spring.MyBean” />
                <value>otherThing</value>
            </list>
        </property>
    ****裝配Set****
        <property name = ”nameList”>
            <set>
                <value>something</value>
                <ref bean = “blog.spring.MyBean” />
                <value>otherThing</value>
            </set>
        </property>
    ****裝配Map****
        <property name = ”nameList”>
            <map>
                <entry key = “key1”>
                    <value>value1</value>
                </entry>
                <entry key = “key2”>
                    <ref bean = “mybean” />
                </entry>
            </map>
        </property>
    ****裝配Properties****
        <property name = ”nameList”>
            <props>
                <prop key = “prop1”>value1</prop>
                <prop key = “prop2”>value2</prop>
            </props>
        </property>
    ● 設定null
        要將一個屬性null,需要通過<null />標籤,如果不設定,則屬性為預設值(在執行個體化時)而不是null。
        <property name=”name”> <null /> </property>

3.通過構造器手動設定bean裡的屬性
    假設有如下一個bean:
    Public class MyBean {
        Public MyBean( String arg1, MyBean1 arg2, String arg3 )
    }
則可以在xml裡這樣配置該bean:
<bean id = “mybean” class = “blog.spring.MyBean”>
        <constructor-arg index = “1”>
            <value>springTest</value>
        <constructor-arg>
        <constructor-arg index = “0”>
            <ref bean = “mybean1” />
        <constructor-arg>
</bean>
其中的index是用來標識該參數在建構函式裡的位置的,並從0開始。

4.讓spring完成自動裝配
    例如:
<bean
id = “mybean”
class = “blog.spring.MyBean”
autowire = “autowire type”
/>
下面是幾種autowire type的說明:
● byname : 試圖在容器中尋找和需要自動裝配的屬性名稱相同的bean或id,如果沒有找到相應的bean,則這個屬性未被裝配上。
● byType : 試圖在容器中尋找一個與需要自動裝配的屬性類型相同的bean或id,如果沒有找到,則該屬性未被裝配上。
● constructor : 試圖在容器中尋找與需要自動裝配的bean的建構函式參數一致的一個或多個bean,如果沒找到則拋出異常。
● autodetect : 首先嘗試使用constructor來自動裝配,然後再使用byType方式。
從上面可以看出,如果某個bean不手動設定autowire屬性,則預設為手動裝配。如果需要將所有bean都設定為自動裝配時,可以通過在<beans>標籤中設定default-autowire屬性。<beans>標籤是整個xml文檔的根,在它下面就是一個個的<bean>。
其中default-autowire的值也有byName,byType,constructor,autodetect四種。
例如配置如下:
<beans default-autowire = “byName”>
    ...
</beans>

    自動裝配可能帶來不確定性問題。例如使用byType時可能同時發現兩個相同的類型,則不知道該採用哪一個。所以可能混合採用自動和手動裝配。例如,對某個bean設定為自動裝配,而對其某個屬性則手動明確的設定其值,例如:
<bean id = “mybean” class = “blog.spring.MyBean”
    Autowire = “byType”
>
    <property name = “name”>
        <ref bean = “myBean1”>
    </property>
</bean>
通過這樣的配置,對mybean裡的name屬性進行手動裝配,而對除name外的其他屬性就進行自動裝配。


 



相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。