搶佔先機
VMware 提供培訓和認證,以加速您的進步。
瞭解更多如果您關注了 10 月份的 Spring 2.0 釋出,您就會知道其中一個重要的新特性是 XML 擴充套件名稱空間:定義新的 XML 元素和屬性以生成 Spring 元資料,並且可以與常規 bean 定義一起使用。 這提供了一個有價值的新擴充套件點,並使 Spring 配置對於許多重複性任務來說使用起來更簡單、更強大。
然而,還有一小塊語法糖您可能沒有注意到——可能是因為 Spring 團隊中沒有人來告訴您……我已經答應自己一段時間要做一篇以程式碼為中心的部落格,現在就開始吧。
遷移到 XML 模式以允許擴充套件名稱空間也允許一個小捷徑,使用屬性而不是子元素來表示屬性值。 這些屬性未經過驗證,但由於我們使用的是 XML 模式而不是 DTD,我們仍然可以保留所有其他驗證。 由於屬性名稱是屬性名稱,因此 XML 驗證無論如何都不會新增任何內容; 這是一個基於 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”屬性,因為自動裝配可以處理它。 您甚至可以在 <beans> 元素級別使用 default-autowire,以在整個檔案中進行自動裝配。
以下來自 Spring 1.0 或 1.1 用法的程式碼片段說明了在最近的兩個主要版本(1.2 和 2.0)中 Spring 配置如何減少了最小數量的尖括號
<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”屬性,而不是在大多數情況下需要 <property> 的子元素,而在 Spring 2.0 中,現在可以使用純粹的屬性。
當然,傳統的語法仍然有效——Spring 2.0 只是添加了額外的選項。 當屬性值複雜且作為屬性值不合法或不可讀時,請使用傳統的長手形式。 而且,當然,無需重寫現有的配置檔案,因為 Spring 2.0 總體上是完全向後相容的。
當將配置示例放入簡報中時,新語法特別好。 這提醒我,我今天的真正工作是完成我在 Spring Experience 的幻燈片……希望在那裡見到你!