1. 程式人生 > >Spring----有關bean的配置

Spring----有關bean的配置

1.單例類的配置
如果我們想建立一個單例類的bean,只能會通過靜態工廠來建立。
下圖為一個單例類:

Stage並沒有提供公開的構造方法,構造方法都是私有的,必須通過getInstance()方法獲得已經例項化好的stage,所以我們每次呼叫返回的都是相同的例項。
在Spring的配置檔案中,我們可以通過<bean> 的factory-method屬性,呼叫一個指定的靜態方法來建立例項。

2.bean的作用域
Spring中所有的bean預設都是單例。當容器分配一個Bean時,返回的都是同一個例項,單有時候我們需要每次呼叫都返回一個唯一的bean例項,可以通過配置bean的scope屬性實現。
scope值預設為singleton 即單例。 修改為prototype 每次呼叫都會建立一個例項。

3.初始化和銷燬Bean
當例項化一個bean時,可能需要執行一些初始化的操作,同樣,當不在需要Bean,將其從容器中移除時,我們可能還需要按照順序執行清楚工作。為了滿足在初始化和銷燬Bean時所需要做的特殊操作,Spring提供了Bean生命週期的鉤子方法。
為Bean定義初始化和銷燬操作,只需要使用init-method 和destrory-method引數來配置<bean>元素
例如:
在Stage類中新增初始化和銷燬時所要執行的方法:

配置xml檔案,在bean中設定init-method和destroy-method屬性

4.注入Bean屬性
注入簡單值
將字串作為引數注入。
<bean id =“XX” class="xxxxxxxxxxxxxxxxxxxxxx">
<property name="song" value="yesterday once more">
<beans>
將數字作為引數注入
<bean id =“XX” class="xxxxxxxxxxxxxxxxxxxxxx">
<property name="age" value="18">
<beans>
引用其他的bean


將A作為引數注入到其他bean中
<bean id =“A” class="xxxxxxxxxxxxxxxxxxxxxx">
<property name="age" value="18">
<beans>
<bean id =“XX” class="xxxxxxxxxxxxxxxxxxxxxx">
<property name="instrument" ref="A">
<beans>
spring裝配集合
當配置集合型別的bean屬性時,spring提供了4種類型的集合配置元素,如下。

集合元素 用途
<list> 裝配list型別的值,允許重複
<set> 裝配set型別,不允許重複
<map> 裝配map型別的值,名稱和值可以是任意型別
<props> 裝配properties型別的值,名稱和值必須都是String型別


裝配List:
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<property name="roleName" value="輔導員"/>
<property name="users">
<list>
<ref bean="users1"/>
<ref bean="users2"/>
<ref bean="users2"/> //允許重複
</list>
</property>
</bean>
<bean id="users1" class="cn.com.ztz.spring.model.Users">
<property name="name" value="張三"/>
</bean>
<bean id="users2" class="cn.com.ztz.spring.model.Users">
<property name="name" value="李四"/>
</bean>


裝配set
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<property name="roleName" value="輔導員"/>
<property name="users">
<set>
<ref bean="users1"/>
<ref bean="users2"/>
<ref bean="users2"/> //不允許重複,user2只會注入一個。
</set>
</property>
</bean>
<bean id="users1" class="cn.com.ztz.spring.model.Users">
<property name="name" value="張三"/>
</bean>
<bean id="users2" class="cn.com.ztz.spring.model.Users">
<property name="name" value="李四"/>
</bean>


裝配Map
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<property name="roleName" value="輔導員"/>
<property name="users">
<map>
<entry key="USERS1" value-ref="users1"/>
<entry key="USERS2" value-ref="users2"/>
</map>
</property>
</bean>
<bean id="users1" class="cn.com.ztz.spring.model.Users">
<property name="name" value="張三"/>
</bean>
<bean id="users2" class="cn.com.ztz.spring.model.Users">
<property name="name" value="李四"/>
</bean>
<map>中的<entry>元素由一個鍵和一個值組成,鍵和值可以是簡單型別,也可以是其他的Bean的引用。這些屬性將幫助我們指定<entry>的鍵和值

 

裝配properties集合(類似map但是key和value必須均為字串)
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<property name="roleName" value="輔導員"/>
<property name="users">
<props>
<prop key="USERS">張三</prop>
<prop key="AGE">19</prop>
</props>
</property>
</bean>


裝配null
有時候由於特殊原因,需要將bean的某個值設定為空
這是後我們可以如下配置:
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<property name="roleName" value="輔導員"/>
<property name="users"><null/></property>
</bean>