天天看點

Spring-Context之七:使用p-namesapce和c-namespace簡化bean的定義

在Spring中定義bean的方式多種多樣,即使使用xml的方式來配置也能派生出很多不同的方式。

比如如下的bean定義:

這樣的bean有三行,通過使用p-namespace以後可以簡化為一行。

那麼什麼是<code>p-namespace</code>那?它的作用就是使用xml中的元素屬性取代<code>&lt;property/&gt;</code>節點來定義bean的屬性。這個神奇的p是什麼東西那?它其實是使用了namespace的xml擴充配置格式。beans的配置格式是定義在一個xsd格式中的(即 http://www.springframework.org/schema/beans/spring-beans.xsd),但p卻沒有一個xsd格式檔案與其對應,但是它可以被spring核心解析處理。

上面隻是示範了對屬性為普通值的時使用<code>p-namespace</code>的注入,如果屬性為另一個bean的引用時該如何處理那?很簡單。

這是使用正常方式注入屬性。

使用<code>p-namespace</code>後是這樣的。

加上<code>-ref</code>字尾即表示是對一個bean的引用。

那既然setter方法注入bean可以使用<code>p-namespace</code>,那麼構造器方式注入有沒有相應的簡寫那?答案是肯定的,那就是<code>c-namespace</code>,原理和使用方法與<code>p-namespace</code>大同小異。

使用<code>c-namespace</code>前:

使用<code>c-namespace</code>後:

也可以使用<code>-ref</code>字尾來表示對另一個bean的引用。

在前面章節講解構造器注入時,可以使用構造參數索引來注入依賴,<code>c-namespace</code>也支援這一方式。

怎麼樣,是不是很強大啊。但是太過強大也容易傷人傷己。在項目中使用這些技巧之前最好先和項目成員達成一緻。