关于spring中<util:**/>的配置

本文详细介绍了Spring中如何使用&lt;util/&gt;命名空间来简化集合的定义与配置,包括constant、property-path、properties、list、map、set等元素的应用,以及如何通过&lt;p/&gt;命名空间简化属性注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文[url]http://lehsyh.iteye.com/blog/687752[/url]
参考: [url]http://www.java2s.com/Code/Java/Spring/CreateListMapInContext.htm[/url]

探索<util/>命名空间
事情的发展总是一段曲折前进的过程。当Spring刚出现时,开发者可以使用<list/>、<map/>、<set/>等元素定义集合,然而这些集合不能够在不同的受管Bean间进行复用。尽管开发者可以采用抽象Bean机制实现复用,但实在不怎么优雅。与此同时,开发者借助ListFactoryBean、MapFactoryBean和SetFactoryBean等对象能够定义出可供复用的集合。然而,这也不是很友好的做法。再后来,<util/>命名空间被Spring 2.x引入,这才使得集合的定义变得简单。

首先在spring的配置文件中添加
<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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util
<a href="http://www.springframework.org/schema/util/spring-util-2.0.xsd">http://www.springframework.org/schema/util/spring-util-2.0.xsd">


[color=darkblue]1. <util:constant/>元素 [/color]
比如某类存在如下字段定义
public static final String hwStatic = "hello static constant"; 

如果希望以上属性取值作为受管Bean,可以如下配置:
<util:constant id="hwConstant" static-field="test.HelloWorld.hwStatic"/>  

这样就将java代码中的常量hwStatic(在test包下的HelloWorld类中)配置给spring进行管理,id为另起的名字;
又eg:
<util:constant id="maxValue" static-field="java.lang.Integer.MAX_VALUE"/>  


[color=darkblue] 2. <util:property-path/>元素[/color]
<bean id="property-path" path="helloWorld.hello"/>  
<bean id="helloWorld" class="test.HelloWorld">
<property name="hello" value="hi"/>
</bean>

这里path="helloworld.hello"就是指bean为"helloworld"的属性hello。

[color=darkblue]3. <util:properties/>元素 [/color]
"classpath:"表明,将从类路径上查找并装载xxx属性文件.
<util:properties id="xxx" location="classpath:xxxxx.properties">  


[color=darkblue]4. <util:list/>元素 [/color]
<util:list id="listUtil" list-class="java.util.ArrayList">  
<value>first</valuse>
<value>two</valuse>
<value>three</valuse>
<value>ten</valuse>
</util:list>

它的作用就是在spring启动初始化bean时,给listUtil这个list赋值为这四个值。 下面的同理

[color=darkblue]5. <util:map/>元素 [/color]
<bean id="abstractCollectionBean" abstract="true">  
<property name="map">
<map>
<entry key="mapKey1" value="mapValue1">
<entry key="mapKey2" value="mapValue2">
</map>
</property>
</bean>

继承了abstractCollectionBean的子bean
<bean id="CollectionBean"  class="test.CollectionBean" parent="abstractCollectionBean">  
<property name="map">
<map merge="true" key-type="java.lang.String" value-type="java.lang.String">
<entry key="mapKey1" value="mapValue1Override"/>
<entry>
<key><value>mapKey2</value></key>
<value>mapValue2</value>
</entry>
<entry key="testBean" value-ref="testBean">
</map>
</property>
</bean>
<bean id="testBean" class="test.TestBean" />


为了简化MapFactoryBean对象的使用,可使用如下代码 :
<util:map id="mapUtil" map-class="java.util.HashMap">  
<entry key="1" value="first">
<entry key="2" value="two">
<entry key="3" value="three">
</util:map>


[color=darkblue]6. <util:set/>元素[/color]
同样的,为了简化SetFactoryBean对象,可使用如下代码 :
<util:set id="setUtil" set-class="java.util.HashSet">  
<value>first</value>
<value>two</value>
<value>three</value>
</util:set>


[color=red]7. 使用<p/>命名空间[/color]
在xml头加入 xmlns:p=http://www.springframework.org/schema/p;这里的p就是property的意思。

例如如下代码:
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
<property name="locations" ref="locations"/>
<property name="order" value="1"/>
</bean>

<util:list id="locations">
<value>userinfo.properties</value>
</util:list>


在导入了</p>命名空间后,等价于
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"  p:locations-ref="locations" p:order="1" />    

<util:list id="locations">
<value>userinfo.properties</value>
</util:list>

实例:[url]http://blog.youkuaiyun.com/daryl715/archive/2007/09/26/1802292.aspx[/url]
原创地址:[url]http://wutheringsea.iteye.com/blog/647924[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值