熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring中bean的基本xml配置

2013-11-23 20:23:04  來源: Java開源技術 

  在spring容器內拼湊bean叫作裝配裝配bean的時候你是在告訴容器需要哪些bean以及容器如何使用依賴注入將它們配合在一起

  理論上bean裝配可以從任何資源獲得包括屬性文件關系數據庫等但xml是最常見的spring 應用系統配置源Spring中的幾種容器都支持使用xml裝配bean包括

  

  XmlBeanFactory
 ClassPathXmlApplicationContext
 FileSystemXmlApplicationContext
 XmlWebApplicationContext

  基本的xml配置包括如下幾個方面

  添加一個bean

  設置bean的屬性

   手動設置

   通過Setter方法

   通過構造器

   自動設置

  其中bean的屬性即為bean裡的成員變量這些成員變量值的獲得可以通過setter方法例如某個屬性為name則setter方法為setName(String name)或者通過構造器在類被實例化時初始化Setter方法(例如setName方法)或者構造器的調用都可以通過在xml文件裡進行配置從而實現讓spring容器來自動進行

  添加一個bean

  以下是一個例子

  

  <bean
id = mybean
Class = blogspringMyBean
Singleton = false
initmethod = initMethod
destroymethod = destroyMethod
autowire = autowire type
/>

  下面是對該標簽裡各個屬性的解釋

  Id 標識該bean的名稱通過factorygetBean(id)來獲得實例

  Class 該bean的類路徑

  Singleton 默認為true即單實例模式每次getBean(id)時獲取的都是同

  一個實例如果設置為false即原型模式則每次獲取的是新創建的實例

  Initmethod 在bean實例化後要調用的方法(bean裡定義好的方法)

  Destroymethod bean從容器裡刪除之前要調用的方法

  Autowire 其屬性要通過何種方法進行屬性的自動裝配

  對於上述的各個屬性id和class是必要的其他的則可以省略例如如果設置了autowire的值則表明需要自動裝配否則是手動裝配

  通過Setter方法手動設置bean裡的屬性

  Bean裡的屬性通過<property>標簽來標識有以下幾種情況

  ● 簡單類型屬性

  

  <bean id = mybean class = blogspringMyBean>
<property name = name>
<value>springTest</value>
</property>
</bean>

  ● 引用其他bean <bean id = mybean class = blogspringMyBean />

  

  <bean id = mybean class = blogspringMyBean />
<bean id = mybean class = blogspringMyBean>
<property name = name>
<ref bean = mybean />
</property>
</bean>

  也可以將<ref>改為 <bean class = ……>

  這樣叫做內部bean缺點是無法在其他地方重用這個bean的實例

  ● 裝配集合

  共有以下幾種集合的裝配 ****裝配List和數組****

  

  ****裝配List和數組****
<property name = nameList>
<list>
<value>something</value>
<ref bean = blogspringMyBean />
<value>otherThing</value>
</list>
</property>
****裝配Set****
<property name = nameList>
<set>
<value>something</value>
<ref bean = blogspringMyBean />
<value>otherThing</value>
</set>
</property>
****裝配Map****
<property name = nameList>
<map>
<entry key = key>
<value>value</value>
</entry>
<entry key = key>
<ref bean = mybean />
</entry>
</map>
</property>
****裝配Properties****
<property name = nameList>
<props>
<prop key = prop>value</prop>
<prop key = prop>value</prop>
</props>
</property>

  ● 設置null

  要將一個屬性null需要通過<null />標簽如果不設置則屬性為默認值(在實例化時)而不是null

  <property name=name> <null /> </property>

  通過構造器手動設置bean裡的屬性

  假設有如下一個bean

  

  Public class MyBean {
Public MyBean( String arg MyBean arg String arg )
}

  則可以在xml裡這樣配置該bean

  

  <bean id = mybean class = blogspringMyBean>
<constructorarg index = >
<value>springTest</value>
<constructorarg>
<constructorarg index = >
<ref bean = mybean />
<constructorarg>
</bean>

  其中的index是用來標識該參數在構造函數裡的位置的並從開始

  讓spring完成自動裝配

  例如

  

  <bean
id = mybean
class = blogspringMyBean
autowire = autowire type
/>

  下面是幾種autowire type的說明

  ● byname 試圖在容器中尋找和需要自動裝配的屬性名相同的bean或id如果沒有找到相應的bean則這個屬性未被裝配上

  ● byType 試圖在容器中尋找一個與需要自動裝配的屬性類型相同的bean或id如果沒有找到則該屬性未被裝配上

  ● constructor 試圖在容器中尋找與需要自動裝配的bean的構造函數參數一致的一個或多個bean如果沒找到則拋出異常

  ● autodetect 首先嘗試使用constructor來自動裝配然後再使用byType方式

  從上面可以看出如果某個bean不手動設置autowire屬性則默認為手動裝配如果需要將所有bean都設置為自動裝配時可以通過在<beans>標簽中設置defaultautowire屬性<beans>標簽是整個xml文檔的根在它下面就是一個個的<bean>

  其中defaultautowire的值也有byNamebyTypeconstructorautodetect四種

  例如配置如下

  

  <beans defaultautowire = byName>

</beans>

  自動裝配可能帶來不確定性問題例如使用byType時可能同時發現兩個相同的類型則不知道該采用哪一個所以可能混合采用自動和手動裝配例如對某個bean設置為自動裝配而對其某個屬性則手動明確的設置其值例如

  

  <bean id = mybean class = blogspringMyBean
Autowire = byType
>
<property name = name>
<ref bean = myBean>
</property>
</bean>

  通過這樣的配置對mybean裡的name屬性進行手動裝配而對除name外的其他屬性就進行自動裝配


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28414.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.