領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多如果您有關注 10 月份 Spring 2.0 的發布,您會知道其中一個重要的新功能是 XML 擴展命名空間:定義新的 XML 元素和屬性,以產生 Spring 元數據,並且可以與常規 bean 定義一起使用。這提供了一個有價值的新擴展點,並使 Spring 配置對於許多重複性任務來說,使用起來更簡單且更強大。
然而,還有一個小小的語法糖,您可能沒有注意到--可能是因為 Spring 團隊中沒有人來告訴您... 因為我已經答應自己好一陣子要做一篇以程式碼為中心的部落格了,所以這就開始了。
轉向 XML Schema 以允許擴展命名空間也允許一個小小的捷徑,使用屬性而不是子元素來表示屬性值。 這些屬性不會被驗證,但因為我們使用的是 XML Schema 而不是 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 的投影片... 希望在那裡見到您!