通常,javabean的屬性是私有的,同時擁有一組存取器方法,setxxx()和getxxx()形式存在。spring可以借助屬性的set方法來配置屬性的值,以實作setter方式的注入。
kenny是一個很有天賦的樂曲演奏家,由intrumentalist類定義,如下:
instrument接口定義如下:
在spring中可以使用<code><property></code>元素配置bean的屬性,如下例子展示了kenny bean的配置:
kenny是一個天才的演奏家,他可以演奏任何樂器,隻要這個樂器實作了instrument接口,定義一個樂器類saxophone:
在kenny演奏薩克斯之前,我們現在spring中将它聲明為一個bean,如下所示:
聲明之後就可以把它賦給kenny演奏了,我們對kenny的配置做如下修改:
下面我們可以執行如下代碼讓kenny表演:
輸出結果為:
playing jingle bells : toot toot toot
注入内部bean
内部bean是定義在其他bean内部的bean,如下配置将薩克斯聲明為内部bean:
内部bean并不僅限于setter注入,我們還可以把内部bean裝配到構造方法的入參中,正如下面的duke的新聲明所展示的:
内部bean沒有id屬性,雖然為内部bean配置一個id屬性完全是合法的,但是卻沒有必要。内部類最大的缺點:不能被複用。内部bean僅适用于一次注入,而且也不能被其他bean應用。使用内部bean會影響spring xml配置的可讀性。
spring的命名空間p提供了另一種bean屬性的裝配方式,該方式不需要配置如此多的尖括号。
命名空間p的schema uri為<code>http://www.springframework.org/schema/p</code>。如果你想使用命名空間p,主需要在spring的xml配置中增加如下一段聲明:
使用範例如下:
<code>-ref</code>字尾作為一個辨別來告知spring應該裝配一個引用而不是字面值。
當配置集合類型的bean屬性時,spring提供了4種類型的集合配置元素。
集合元素
用途
<code><list></code>
裝配list類型的值,允許重複
<code><set></code>
裝配set類型的值,不允許重複
<code><map></code>
裝配map類型的值,名稱和值可以是任意類型
<code><props></code>
裝配properties類型的值,名稱和值必須是string類型
當屬性為任意的java.util.collection類型時,<code><list></code>和<code><set></code>幾乎可以完全互換。
<code><map></code>和<code><props></code>這兩個元素分别對應java.util.map和java.util.properties。當我們需要由鍵-值對組成的集合時,這兩種配置元素非常有用。
hank能夠同時演奏多種樂器,由類onemanband定義:
我們使用list配置元素為hank賦予表演時所用到的樂器集合:
list元素包含一個或多個值,這裡的ref元素用來定義在spring上下文中的其他bean引用。當然還可以使用其他的spring設定元素作為list的成員,包括<code><vaue></code>、<code><bean></code>和<code><null></code>。實際上,list可以包含另一個list作為其成員,形成多元清單。
note:無論<code><list></code>還是<code><set></code>,都可以用來裝配類型為java.util.collection的任意實作或者數組的屬性。
裝配map集合
當onemanband表演時,假設我們還想知道每一個音符是由哪種樂器産生的,onemanband可以調整如下:
使用map元素配置instruments屬性,如下所示:
map中的entry元素由一個鍵和一個值組成,鍵和值可以是簡單類型,也可以是其他類型的引用,這些屬性将幫助我們指定entry的鍵和值:
屬性
key
指定map中entry的鍵為string
key-ref
指定map中entry的鍵為spring上下文中其他bean的引用
value
指定map中entry的值為string
value-ref
指定map中entry的值為spring上下文中其他bean的引用
裝配properties集合
一個範例如下:
note:術語比較
<code><property></code>元素用于把值或bean引用注入到bean的屬性中
<code><props></code>元素用于定義一個java.util.properties類型的集合值
<code><prop></code>元素用于定義<code><props></code>集合的一個成員。
通常情況下bean屬性的最初值都是null,直到你為它指派,但是有些bean會為它的屬性預設設定一個非空值。如果因為某些特殊原因,必須把屬性設定為空值,則可以顯式地為該屬性裝配一個null值。
為屬性設定null值,隻需使用<code><null/></code>元素,例如:
顯式地為屬性裝配null值的另一個理由是覆寫自動裝配的值。
轉載:http://blog.csdn.net/foreverling/article/details/50878992