天天看點

Spring進階應用之注入嵌套Bean

    在spring中,如果某個bean所依賴的bean不想被spring容器直接通路,可以使用嵌套bean。和普通的bean一樣,使用<bean>元素來定義嵌套的bean,嵌套bean隻對它的外部的bean有效,spring容器無法直接通路嵌套的bean,是以定義嵌套bean也無需指定id屬性。如下配置片段是一個嵌套bean的示例:

<a href="http://my.oschina.net/itblog/blog/204378#">?</a>

1

2

3

4

5

6

<code>&lt;</code><code>bean</code> <code>id</code><code>=</code><code>"student"</code> <code>class</code><code>=</code><code>"com.abc.student"</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 下面是一個普通的屬性 --&gt;</code>

<code>    </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"name"</code> <code>value</code><code>=</code><code>"張三"</code> <code>/&gt;</code>

<code>    </code><code>&lt;!-- 下面的屬性是一個嵌套的bean,對于和student平級的bean來說,這個bean是不可見的,spring容器也無法通路 --&gt;</code>

<code>    </code><code>&lt;</code><code>bean</code> <code>class</code><code>=</code><code>"com.abc.school"</code> <code>/&gt;</code>

<code>&lt;/</code><code>bean</code><code>&gt;</code>

    采用上面的配置形式可以保證嵌套bean不能被容器通路,是以不用擔心其他程式修改嵌套bean。外部bean的用法和使用結果和以前沒有差別。

    嵌套bean提高了bean的内聚性,但是降低了程式的靈活性。隻有在确定無需通過spring容器通路某個bean執行個體時,才考慮使用嵌套bean來定義。

    使用嵌套bean與使用ref引用容器中另一個bean在本質上是一樣的,但是,如果使用ref,則ref的這個bean不僅可以被容器直接通路(如使用classpathxmlapplicationcontext的getbean()方法擷取其執行個體),還可以為其它的bean所使用(如果這些bean中含有這個類型的屬性)。是以是否使用嵌套bean,得看實際需求。