Spring中bean的基本xml配置
有狀態(tài)的bean ,需設(shè)置 <bean .......singleton="false"></bean>
**********
在
spring
容器內(nèi)拼湊
bean
叫作裝配。裝配
bean
的時(shí)候,你是在告訴容器,需要哪些
bean
,以及容器如何使用依賴注入將它們配合在一起。
理論上,
bean
裝配可以從任何資源獲得,包括屬性文件,關(guān)系數(shù)據(jù)庫(kù)等,但
xml
是最常見的
spring
應(yīng)用系統(tǒng)配置源。
Spring
中的幾種容器都支持使用
xml
裝配
bean
,包括:
XmlBeanFactory
,
ClassPathXmlApplicationContext
,
FileSystemXmlApplicationContext
,
XmlWebApplicationContext
基本的
xml
配置包括如下幾個(gè)方面:
1
.添加一個(gè)
bean
2
.設(shè)置
bean
的屬性
2.1
手動(dòng)設(shè)置
2.1.2
通過構(gòu)造器
2.2
自動(dòng)設(shè)置
其中
bean
的屬性即為
bean
里的成員變量,這些成員變量值的獲得可以通過
setter
方法,例如某個(gè)屬性為
name,
則
setter
方法為
setName(String name)
;或者通過構(gòu)造器在類被實(shí)例化時(shí)初始化。
Setter
方法
(
例如
setName
方法
)
或者構(gòu)造器的調(diào)用都可以通過在
xml
文件里進(jìn)行配置,從而實(shí)現(xiàn)讓
spring
容器來(lái)自動(dòng)進(jìn)行。
1
.添加一個(gè)
bean
以下是一個(gè)例子:
<bean
id = “mybean”
Class = “blog.spring.MyBean”
Singleton = “false”
init-method = “initMethod”
destroy-method = “destroyMethod”
autowire = “autowire type”
/>
下面是對(duì)該標(biāo)簽里各個(gè)屬性的解釋:
Id :
標(biāo)識(shí)該
bean
的名稱,通過
factory.getBean(“id”)
來(lái)獲得實(shí)例。
Class :
該
bean
的類路徑。
Singleton :
默認(rèn)為
true
,即單實(shí)例模式,每次
getBean(“id”)
時(shí)獲取的都是同
一個(gè)實(shí)例,如果設(shè)置為
false
,即原型模式,則每次獲取的是新創(chuàng)建
的實(shí)例。
Init-method :
在
bean
實(shí)例化后要調(diào)用的方法
(bean
里定義好的方法
)
。
Destroy-method : bean
從容器里刪除之前要調(diào)用的方法。
Autowire :
其屬性要通過何種方法進(jìn)行屬性的自動(dòng)裝配。
對(duì)于上述的各個(gè)屬性,
id
和
class
是必要的,其他的則可以省略。例如如果設(shè)置了
autowire
的值,則表明需要自動(dòng)裝配,否則是手動(dòng)裝配。
2
.通過
Setter
方法手動(dòng)設(shè)置
bean
里的屬性
Bean
里的屬性通過
<property>
標(biāo)簽來(lái)標(biāo)識(shí)。有以下幾種情況:
●
簡(jiǎn)單類型屬性
<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 = “mybean
<property name = “name”>
<ref bean = “mybean” />
</property>
</bean>
也可以將
<ref>
改為
<bean class = “..”>
這樣叫做內(nèi)部
bean
,缺點(diǎn)是無(wú)法在其他地方重用這個(gè)
bean
的實(shí)例。
●
裝配集合
共有以下幾種集合的裝配:
****
裝配
List
和數(shù)組
****
<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 = “key
<value>value1</value>
</entry>
<entry key = “key
<ref bean = “mybean” />
</entry>
</map>
</property>
****
裝配
Properties****
<property name = ”nameList”>
<props>
<prop key = “prop
<prop key = “prop
</props>
</property>
●
設(shè)置
null
要將一個(gè)屬性
null
,需要通過
<null />
標(biāo)簽,如果不設(shè)置,則屬性為默認(rèn)值
(
在實(shí)例化時(shí)
)
而不是
null
。
<property name=”name”> <null /> </property>
3
.通過構(gòu)造器手動(dòng)設(shè)置
bean
里的屬性
假設(shè)有如下一個(gè)
bean
:
Public class MyBean {
Public MyBean( String arg1, MyBean1 arg2, String arg3 )
}
則可以在
xml
里這樣配置該
bean
:
<bean id = “mybean” class = “blog.spring.MyBean”>
<constructor-arg index = “
<value>springTest</value>
<constructor-arg>
<constructor-arg index = “
<ref bean = “mybean
<constructor-arg>
</bean>
其中的
index
是用來(lái)標(biāo)識(shí)該參數(shù)在構(gòu)造函數(shù)里的位置的,并從
0
開始。
4
.讓
spring
完成自動(dòng)裝配
例如:
<bean
id = “mybean”
class = “blog.spring.MyBean”
autowire = “autowire type”
/>
下面是幾種
autowire type
的說(shuō)明:
● byname :
試圖在容器中尋找和需要自動(dòng)裝配的屬性名相同的
bean
或
id
,如果沒有找到相應(yīng)的
bean
,則這個(gè)屬性未被裝配上。
● byType :
試圖在容器中尋找一個(gè)與需要自動(dòng)裝配的屬性類型相同的
bean
或
id
,如果沒有找到,則該屬性未被裝配上。
● constructor :
試圖在容器中尋找與需要自動(dòng)裝配的
bean
的構(gòu)造函數(shù)參數(shù)一致的一個(gè)或多個(gè)
bean
,如果沒找到則拋出異常。
● autodetect :
首先嘗試使用
constructor
來(lái)自動(dòng)裝配,然后再使用
byType
方式。
從上面可以看出,如果某個(gè)
bean
不手動(dòng)設(shè)置
autowire
屬性,則默認(rèn)為手動(dòng)裝配。如果需要將所有
bean
都設(shè)置為自動(dòng)裝配時(shí),可以通過在
<beans>
標(biāo)簽中設(shè)置
default-autowire
屬性。
<beans>
標(biāo)簽是整個(gè)
xml
文檔的根,在它下面就是一個(gè)個(gè)的
<bean>
。
其中
default-autowire
的值也有
byName
,
byType
,
constructor
,
autodetect
四種。
例如配置如下:
<beans default-autowire = “byName”>
...
</beans>
自動(dòng)裝配可能帶來(lái)不確定性問題。例如使用
byType
時(shí)可能同時(shí)發(fā)現(xiàn)兩個(gè)相同的類型,則不知道該采用哪一個(gè)。所以可能混合采用自動(dòng)和手動(dòng)裝配。例如,對(duì)某個(gè)
bean
設(shè)置為自動(dòng)裝配,而對(duì)其某個(gè)屬性則手動(dòng)明確的設(shè)置其值,例如:
<bean id = “mybean” class = “blog.spring.MyBean”
Autowire = “byType”
>
<property name = “name”>
<ref bean = “myBean1”>
</property>
</bean>
通過這樣的配置,對(duì)
mybean
里的
name
屬性進(jìn)行手動(dòng)裝配,而對(duì)除
name
外的其他屬性就進(jìn)行自動(dòng)裝配。
好貼:http://bbs.bccn.net/thread-83040-1-1.html
posted on 2009-04-12 23:05 luofeng225 閱讀(933) 評(píng)論(0) 編輯 收藏 所屬分類: Spring