您的位置:首页 > 编程语言 > Java开发

Spring 属性注入细节

2016-07-27 17:09 295 查看

Spring 属性注入细节

字面值

字面值:可用字符串表示的值,可以通过< value >元素标签或value属性进行注入。

基本数据类型及其封装类型、String等类型都可以采取字面值注入的形式。

若字面值中包含特殊字符,可以使用< ![CDATA[]] >把字面值包起来。

<bean id="dog2" class="com.metadata.action.Dog">
<constructor-arg value="柴犬" type="java.lang.String"/>
<constructor-arg type="java.lang.String" >
<!-- 如果字面值包含特殊字符可以使用<![CDATA[]]>包含起来 -->
<!--属性值可以使用value子节点进行配置-->
<value><![CDATA[<red>]]></value><!--color=<red> -->
</constructor-arg>
<constructor-arg  type="java.lang.Double">
<value>10.23</value>
</constructor-arg>
</bean>


引用其它Bean

组成应用程序的的Bean经常需要相互协作以完成应用程序的功能,要使Bean能够相互访问就必须在Bean配置文件中指定对Bean的引用。

在Bean的配置文件中,可以通过< ref >元素或ref属性为Bean的属性或构造器参数指定对Bean 的引用。

可以在属性或构造器里包含Bean的声明,这样的Bean成为内部Bean。

<bean id="dog" class="com.metadata.action.Dog">
<constructor-arg value="哈士奇" index="0"/>
<constructor-arg value="yellow" index="1" />
<constructor-arg value="2" type="int"/>
</bean>
<bean id="person" class="com.metadata.action.Person">
<property name="name" value="tom"></property>
<property name="age" value="20"></property>
<!-- 使用property的ref属性建立bean之间的引用关系 -->
<!--
<property name="dog" ref="dog"></property>
-->
<!-- 通过ref节点 -->
<!--
<property name="dog">
<ref bean="dog"/>
</property>
-->
<!-- 内部bean,不能被外部引用,只能内部使用 -->
<property name="dog">
<bean class="com.metadata.action.Dog">
<constructor-arg value="旺财" />
<constructor-arg value="black"/>
<constructor-arg value="1000" type="java.lang.Double"/>
</bean>
</property>
</bean>


注入参数详解:null值和级联属性

可以使用专用的< null/>元素标签为Bean的字符串或其它对象类型的属性注入null值。

和Struts、Hiberante等框架一样,Spring支持级联属性的配置。

<bean id="person2" class="com.metadata.action.Person">
<constructor-arg value="jack" />
<constructor-arg value="26" />
<!--
<constructor-arg><null/></constructor-arg>
-->
<constructor-arg ref="dog" />
<!-- 为级联属性赋值,注意:属性需要先初始化后才可以为属性赋值 -->
<property name="dog.color" value="#ffffff" />
</bean>
</bean>


集合属性

在Spring中可以通过一组内置的xml标签(例如:< list >、< set >、< map >)来配置集合的属性

配置java.util.List类型的属性,需要指定< list >标签,在标签里包含一些元素,这些标签可以通过< value >指定简单的常量值,通过< ref >指定对其他Bean的引用,通过< bean >指定内置Bean定义。通过< null >指定空元素,甚至可以内嵌其他集合。
4000

数组的定义和List一样,都使用< list >

-配置java.util.Set需要使用< set >标签,定义元素的方法与List一样。

<bean id="list" class="com.metadata.list.Person">
<property name="name" value="marry" />
<property name="age" value="18" />
<property name="dogs">
<!-- 通过list节点为List类型的属性赋值 -->
<list>
<ref bean="dog"/>
<ref bean="dog2"/>
<bean class="com.metadata.action.Dog">
<property name="name" value="haha" />
<property name="color" value="gray" />
</bean>
</list>
</property>
</bean>


Java.util.Map通过< map >标签定义,< map >标签里可以使用多个< entrty >作为子标签,每个条目包含一个键和一个值。

必须在< key >标签里定义建。

因为建和值的类型没有限制,所以可以自由地位他们指定< value >、< ref >、< bean >、或< null >元素。

可以将Map的建和值作为< entry >的属性定义:简单常量使用key和value来定义;Bean引用通过key-ref和value-ref属性定义

使用< props >定义java.util.Properties,该标签使用多个< prop >作为子标签,每个< prop >标签必须定义key属性

<bean id="newPerson" class="com.metadata.list.NewPerson">
<property name="name" value="lili" />
<property name="map">
<map>
<entry key="AA" value-ref="dog" />
<entry key="BB" value-ref="dog2" />
</map>
</property>
</bean>


<!-- 配置properties属性值 -->
<bean id="dateSource" class="com.metadata.list.DateSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">root</prop>
<prop key="jdbcurl">http://127.0.0.1:3306</prop>
</props>
</property>
</bean>


使用utility schema定义集合

使用基本的集合标签定义集合时,不能将集合作为独立的Bean定义,导致其他Bean无法引用该集合,所以无法再不同Bean之间共享集合。

可以使用utility schema里面的集合标签定义独立的集合Bean,需要注意的是,必须在< beans >根元素里添加 util schema定义。

<!-- 配置单例的集合Bean,以供多个Bean进行引用,需要导入util命名空间(Namespaces中选取) -->
<util:list id="utillist">
<ref bean="dog"/>
<ref bean="dog2"/>
</util:list>
<bean id="per" class="com.metadata.list.Person">
<property name="name" value="hh"/>
<property name="dogs" ref="utillist" />
</bean>


<!-- 通过p命名空间为Bean属性赋值,需要导入p命名空间 -->
<bean id="plist" class="com.metadata.list.Person" p:name="xm" p:age="20" p:dogs-ref="utillist"></bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring