Spring(04) p命名空間和c命名空間

2021-08-25 19:38:05 字數 2694 閱讀 3274

在通過構造方法或set方法給bean注入關聯項時通常是通過constructor-arg元素和property元素來定義的。在有了p命名空間和c命名空間時我們可以簡單的把它們當做bean的乙個屬性來進行定義。

使用p命名空間時需要先宣告使用對應的命名空間,即在beans元素上加入xmlns:p=""。下面先來看乙個示例。

<?xml version="1.0" encoding="utf-8"?>

在上面示例中,idhello1bean是傳統的bean定義,而idhello2bean是基於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的乙個屬性進行定義,對應的值為所關聯beanidname,如上述示例中的「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 ...