领先一步
VMware提供培训和认证,以加快您的进度。
了解更多如果您关注了10月份发布的Spring 2.0,您就会知道一个重要的新增功能是XML扩展命名空间:能够定义生成Spring元数据的新XML元素和属性,并且可以与常规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”属性,因为自动装配可以处理它。您甚至可以在`
以下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”属性,在大多数情况下不需要`
当然,传统的语法仍然有效——Spring 2.0只是添加了额外的选项。当属性值很复杂并且作为属性值不合法或不可读时,使用传统的冗长形式。当然,不需要重写现有的配置文件,因为Spring 2.0总体上完全向后兼容。
当将配置示例放入演示文稿中时,新的语法特别好用。这提醒我,我今天真正的工作是完成我为Spring Experience准备的幻灯片……希望在那里见到您!