領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多如果你關注了十月份的 Spring 2.0 釋出,你就會知道其中一個重要的新功能是 XML 擴充套件名稱空間:能夠定義新的 XML 元素和屬性,這些元素和屬性可以生成 Spring 元資料,並可以與常規 bean 定義一起使用。這提供了一個有價值的新擴充套件點,使得 Spring 配置對於許多重複性任務來說更易於使用,並且功能更強大。
然而,還有一個你可能沒注意到的炫酷小語法糖——大概是因為 Spring 團隊沒人告訴你……我早就承諾要寫一篇以程式碼為中心的部落格了,現在就開始。
遷移到 XML Schema 以支援擴充套件名稱空間也允許了一個小捷徑,可以使用屬性而不是子元素來表示屬性值。這些屬性不會被驗證,但由於我們使用的是 XML Schema 而不是 DTD,所以我們仍然可以保留所有其他驗證。由於屬性名就是屬性名,XML 驗證 anyway 也不會增加任何東西;這是一個基於 Java 的驗證問題,而不是 XML 結構問題。想象一下以下 Java 物件,它有兩個簡單屬性和一個關聯物件的依賴關係
public class Person {
private int age;
private String name;
private House house;
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setHouse(House house) {
this.house = house;
}
}
在 Spring 2.0 中,可以使用 XML 如下進行配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.interface21.spring2.ioc.Person"
p:name="Tony"
p:age="53"
p:house-ref="number10"
/>
<bean class="com.interface21.spring2.ioc.House"
id="number10"
p:name="10 Downing Street"
/>
</beans>
注意屬性是如何透過屬性而不是元素提供的。這是透過特殊的名稱空間:“p” 的魔力實現的。這是一個特殊的名稱空間,不會被驗證,但旨在允許使用名稱匹配 Java 屬性名稱的屬性。
對於簡單型別,我們只需在“p”名稱空間中使用屬性名,例如“p:name”。在注入對其他 Spring bean 的引用時,請使用“-ref”字尾,例如“p:house-ref”。
當你想使用自動裝配時,這種快捷語法特別有吸引力。例如,考慮以下變體
<bean class="com.interface21.spring2.ioc.Person"
autowire="byType"
p:name="Tony"
p:age="53"
/>
在這裡,我們沒有設定“house”屬性,因為自動裝配可以處理它。你甚至可以在 `
以下來自 Spring 1.0 或 1.1 用法的片段說明了 Spring 配置在最近兩次主要版本(1.2 和 2.0)中如何大大減少了最小的尖括號數量
<bean class="com.interface21.spring2.ioc.Person">
<property name="name"><value>"Tony"</value></property>
<property name="age"><value>"53"</value></property>
<property name="house"><ref local=”number10” /></property>
</bean>
在 Spring 1.2 中,我們引入了“value”和“ref”屬性,在大多數情況下取代了 `
當然,傳統的語法仍然有效——Spring 2.0 只是增加了額外的選項。當屬性值複雜且不適合或不適合作為屬性值時,請使用傳統的長格式。當然,沒有必要重寫現有的配置檔案,因為 Spring 2.0 總體上完全向後相容。
新的語法在將配置示例放入簡報時尤其好用。這讓我想起我今天真正的任務是完成我的 Spring Experience 的幻燈片……希望在那裡見到你!