在Spring 中可以通过一组内置的 Xml 标签来配置集合属性
例如:<List>
<map>
<set>
java.util.List
配置 java.util.List 类型的属性,需要制定 <list> 标签,在标签里包含一些元素,这些标签可以通过 :
- <value> 指定简单的常量值。
- <ref> 指定对其他 bean 的引用
- <bean> 指定内置 bean 定义
- <null> 指定空元素,设置可以内嵌其他集合
- 数组的定义和 <list> 一样都使用 <list>
内部 Bean 配置
<bean id="user1" class="com.laishuai.bean.User">
<property name="name" value="BMW"></property>
<property name="age" value="30"></property>
<property name="cars">
<list>
<bean name="car1" class="com.laishuai.bean.Car">
<property name="name" value="BWM"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4"></property>
</bean>
<bean name="car2" class="com.laishuai.bean.Car">
<property name="name" value="Benz"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4"></property>
</bean>
</list>
</property>
</bean>
引用外部 Bean
<bean name="car1" class="com.laishuai.bean.Car">
<property name="name" value="BWM"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4">
</bean>
<bean name="car2" class="com.laishuai.bean.Car">
<property name="name" value="Benz"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4">
</bean>
<bean id="user1" class="com.laishuai.bean.User">
<property name="name" value="BMW"></property>
<property name="age" value="30"></property>
<property name="cars">
<list>
<ref bean="car1">
<ref bean="car2">
</list>
</property>
</bean>
Java.util.Map
Java.util.Map 通过 <map> 标签定义,<map> 标签里可以使用多个 <entry>,作为子标签。每个条目包含一个键和一个值。
必须在 <key> 标签里定义键
因为键和值的类型没有限制
,所以可以自由的为他们指定 <value> 、<ref>、<bean>、<null> 元素。
- 可以将 Map 的键和值作为 <entry>的属性定义;
- 简单常量使用 key 和 value 来定义;
- Bean 引用使用value-ref属性来定义;
- 使用 <props> 定义 java.util.Properties:
该标签使用多个<prop> 作为子标签,每个 <prop> 标签必须定义 key 属性
<bean name="car3" class="com.laishuai.bean.Car">
<property name="name" value="BWM"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4"></property>
</bean>
<bean name="car4" class="com.laishuai.bean.Car">
<property name="name" value="Benz"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4"></property>
</bean>
<bean name="laishuaiMap" class="com.laishuai.bean.LaiShuaiMap">
<property name="name" value="LaiShuai"></property>
<property name="cars">
<map>
<entry key="car3" value-ref="car3"></entry>
<entry key="car4" value-ref="car4"></entry>
</map>
</property>
</bean>
当map的 key 和 value 的值类型都是 String 时可以用 value 赋值
使用 Utility Scheme 定义集合
使用基本集合标签定义集合时,不能将集合作为独立的 Bean 定义,导致其他 Bean 不能引用该集合,所以不能在不同 Bean 组件共享集合;
可以使用util schema 里的集合标签定义独立的集合 Bean ,需要注意的是,必须在 <beans> 根元素里添加 util.schema 定义;
<bean name="car3" class="com.laishuai.bean.Car">
<property name="name" value="BWM"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4"></property>
</bean>
<bean name="car4" class="com.laishuai.bean.Car">
<property name="name" value="Benz"></property>
<property name="lenght" value="5"></property>
<property name="width" value="4"></property>
</bean>
<util:list id="cars">
<ref bean="car3"></ref>
<ref bean="car4"></ref>
</util:list>
<bean name="user4" class="com.laishuai.bean.User">
<property name="name" value="LaiShuai"></property>
<property name="age" value="21"></property>
<property name="cars" ref="cars"></property>
</bean>
使用 P 命名空间
为了简化 XML 文件配置,越来越多的 XML 文件采用 属性 而非子元素配置信息;
Spring 2.5 版本开始引入一个新的 P 命名空间,可以通过 Bean 元素属性的方式配置 Bean 的属性 。
使用 P 命名空间后,基于 XML 的配置方式将进一步简化
<bean name="user5" class="com.laishuai.bean.User" p:name="ls" p:cars-ref="cars" ></bean>
网友评论