在通過構造方法或set
方法給bean
注入關聯項時通常是通過constructor-arg
元素和property
元素來定義的。在有了p
命名空間和c
命名空間時我們可以簡單的把它們當做bean
的乙個屬性來進行定義。
使用p
命名空間時需要先宣告使用對應的命名空間,即在beans
元素上加入xmlns:p=""
。下面先來看乙個示例。
<?xml version="1.0" encoding="utf-8"?>如上所示,在上面示例中,
id
為hello1
的bean
是傳統的bean
定義,而id
為hello2
的bean
是基於p
命名空間的bean
定義。當傳統的property
元素定義的value
是基礎資料型別時,我們可以直接把property
元素對應的name
加上p
命名空間的字首作為bean
的乙個屬性進行定義,對應的值就是原property
元素對應的value
。如上述示例中name
為「p1」
的property
使用p
命名空間後就變成了「p:p1」
;當傳統的property
元素定義的是對其它bean
的關聯時,我們可以直接把property
元素對應的name
加上「-ref」
,再加上p
命名空間的字首作為bean
的乙個屬性進行定義,對應的值為原property
元素對應的ref
值,如上述示例中name
為「world」
的property
就是定義了對其它bean
的關聯,使用p
命名空間後就變成了「p:world-ref」
。這裡有一點需要注意的地方就是property
對應的是set
方法,而不是對應的屬性,如name
為「world」
的property
實際上對應的是setworld()
方法,這個時候不管對應的bean
是否真存在名為world
的屬性;另一點需要注意的地方是使用p
命名空間時要注意以「-ref」
結尾的property
,這會導致spring
以其前部分作為property
,因為「-ref」
會被spring
作為關聯的關鍵字。
c
命名空間的用法和p
命名空間類似,其對應於constructor-arg
,即可以將constructor-arg
元素替換為bean
的乙個以c
命名空間字首開始的屬性。使用c
命名空間之前也需要通過xmlns:c=」
進行宣告。<?xml version="1.0" encoding="utf-8"?>
c
命名空間的用法和p
命名空間的用法類似。對於通過構造方法注入原始型別的物件可以把對應的構造引數名稱加上c
命名空間的字首作為bean
的乙個屬性進行定義,對應的值即是構造引數的值;如果通過構造引數注入的是其它bean
的乙個引用,則可將該構造引數名稱加上「-ref」
,再加上c
命名空間的字首作為該bean
的乙個屬性進行定義,對應的值為所關聯bean
的id
或name
,如上述示例中的「c:arg3-ref」
。
需要注意的是直接把構造引數名稱加上c
命名空間的字首作為bean
的乙個屬性定義來替代對應的constructor-arg
只對以debug
方式編譯的class
有效,因為對於非debug
方式編譯的class
檔案spring
將無法獲取到對應構造方法的引數名。對於這種情況我們可以直接使用構造方法引數的索引加上下劃線「_」
字首來代替對應的引數名,索引是從0開始的,如上面的示例以索引來代替時將是如下這個樣子。
<?xml version="1.0" encoding="utf-8"?>(注:本文是基於spring4.1.0所寫)
spring中的c命名空間和p命名空間是什麼?
舉例說明 user實體類 public class user public void setname string name public intgetage public void setage int age 給這個實體類在ioc容器中註冊對應元件並且注入age和name的值 如果按照我們以前的...
Spring 中 C P 命名空間 04
spring 中 c p 命名空間就是簡化constructor arg 和 property 標籤的,可以進行簡單的注入,一些複雜的資料型別還是要使用constructor arg 和 property 標籤。使用 c p 命名空間例子 data allargsconstructor noargs...
Spring 的 P 命名空間
p 命名空間 不是新的東西,它是對 ioc 和 di 的簡化。使用 p 命名空間 可以更加方便地完成 bean 的配置以及 bean 之間的依賴注入。首先必須確保 xml 檔案中引入了 p 命名空間。xmlns xmlns xsi xmlns p xsi schemalocation spring ...