Spring依赖注入 — util命名空间配置
要使用<util>标签,必须在XML中加入util名称空间(namespace):
xmlns:util="http://http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-2.0.xsd"
分别使用<util:list>、<util:map>、<util:set>、<util:properties>等标签。
用它来取代ListFactoryBean、MapFactoryBean、SetFactoryBean、PropertiesFactoryBean。
其中的<util:properties>标签可以通过location属性指定其properties属性文件的位置。
除了以上使用的标签外,还有<util:constant>可用来设置静态数据成员(staticfield),而免于设置org.springframework.beans.factory.config.FieldRetrievingFactoryBean,例如:
<bean id="circle" class="cn.itcast.spring._other.Circle"> <property name="pi"> <util:constant static-field="java.lang.Math.PI"/> </property> </bean>
还可以使用<util:property-path>标签为某个Bean的属性成员设置id属性,使之在容器管理中,免于设置org.springframework.beans.factory.config.PropertyPathFactoryBean,例如:
<!-- id值为PI的Bean,其值将会是circle.pi --> <util:property-path id="PI" path="circle.pi"/>
修改集合对象中示例的Bean定义文件
<bean id="some1" class="cn.itcast.spring._util.Some"> <property name="val" value="some instance1" /> </bean> <bean id="some2" class="cn.itcast.spring._util.Some"> <property name="val" value="some instance2" /> </bean> <bean id="some3" class="cn.itcast.spring._util.Some"> <property name="val" value="some instance3" /> </bean> <util:list id="strArray"> <value>Hello</value> <value>Welcome</value> </util:list> <util:list id="objArray"> <ref bean="some1" /> <ref bean="some2" /> <ref bean="some3" /> </util:list> <util:list id="list" list-class="java.util.ArrayList"> <ref bean="some1"/> <ref bean="some2" /> <ref bean="some3" /> </util:list> <util:map id="map" map-class="java.util.HashMap" > <entry key="key1" value-ref="some1"/> <entry key="key2" value-ref="some2"/> <entry key="key3" value-ref="some3"/> </util:map>
写完util配置文件后,如何给某个类赋值呢?也可以直接用配置的方式:
<bean id="someBean" class="cn.itcast.spring._util.SomeBean"> <property name="someStrArray" ref="strArray"/> <property name="someObjArray" ref="objArray"/> <property name="someList" ref="list"/> <property name="someMap" ref="map"/> </bean>
或者在类中使用@Value注解
@Value("#{strArray}") private List<String> somoeStrArray; @Value("#{objArray}") private List<Some> somoeObjArray; @Value("#{list}") private List<Some> somoeList; @Value("#{map}") private Map<String,Some> someMap;