本篇内容:
- 1、参数注入字面值
- 2、参数引用其他Bean
- 3、参数注入内部Bean
- 4、参数注入null
- 5、参数注入级联属性
- 6、参数注入集合类型数据:List,Set,Map,集合合并,通过util命名空间
一、字面值
- 可用字符串表示的值,可用通过<value>元素标签进行注入,默认情况下基本数据类型及封装类,String等类型都可用采用字面值注入方式。
- Spring容器在内部为字面值提供了编辑器,可用将字符表示的字面值转换为内部变量的相应类型。Spring允许用户注册自定义的编辑器,处理其他类型属性注入时的转换工作。
<bean id="car" class="com.demo.Car">
<property name="title">
<value><![CDATA[雷克萨斯 &ES]]></value>
</proprtey>
</bean>
- 说明:
- xml标签:<![CDATA[ ]]>:让xml解析器将标签中的字符串当成普通文本对待,防止特殊字符串对xml格式造成破坏
xml在有5个特殊字符:&,<,>,“,'
- 如果配置文件中的注入值包含特殊字符可以采用xml特殊符号标签,或采用转义字符
二、引用其他Bean
- SpringIoc容器中定义的Bean可以相互引用。
1、引用使用:
<bean id="data" class="com.lang.String"/>
<bean id="car" class="com.demo.Car">
<property name="title">
<ref bean="data"/>
</property>
</bean>
说明:
- ref bean="data":给当前bean引用id为data的对象做为当前title属性
2、<ref>元素
有3个属性引用容器中其他的Bean
- 1、bean:通过该属性可以引用当前容器或父容器中的Bean
- 2、local:只能引用同一配置文件中定义的Bean
- 3、parent:引用父容器中的Bean
说明:
- 三个属性根据不同的场景使用不同的属性
三、内部Bean
- 内部Bean和java中匿名内部类相似,没有名字不能被其他bean引用,只能在声明处为外部Bean提供实例注入。
<bean id="car" class="com.demo.Car">
<property name="title">
<bean class="com.lang.String" />
</property>
</bean>
- 内部Bean提供的属性会被忽略,scope默认为Prototype类型
四、null值
- 使用<null>元素标签给属性注入null值
<property name="title" <null/></property>
- 此配置等同于bean#setTitle(null)
五、级联属性
- 和Struts、HIbernate框架一样Spring支持级联属性
1、定义实体对象
public class Car{
private String title;
public void setTitle(String title){
this.title = title;
}
}
public class Person{
private Car car = new Car();
public void setCar(Car car){
this.car=car;
}
}
2、配置文件
<bean id="person" class="">
<property name="car.title" value="雷克萨斯" />
</bean>
说明:
- name="car.title":提供了一个Car实例对象,并设置Car中的title属性为对应value
注意:
- Spring没有级联属性层级限制,前提级联中对象不能为空。
六、集合类型属性
- java中常用的集合为list,set,Map,Properties
6.1、list集合
- 如果一个属性类型为String[ ],int [ ] ,List<String> 都可以使用list方式注入数据
- 实体方法:public void setTitle(List<String> title)
配置文件
<bean id="" class="">
<property name="title">
<list>
<value>xxx</value>
<value>xxx</value>
</list>
</property>
</bean>
- 说明:
- list中的属性可以使用value也可以使用ref方式注入
6.2、set集合
- 配置文件
<bean id="" class="">
<property name="title">
<set>
<value>xxx</value>
<value>xxx</value>
</set>
</property>
</bean>
- 说明:
- set集合与list集合的使用基本一致,而本质的区别还是java中list和set集合的区别
6.3、Map集合
- 配置文件
<bean id="" class="">
<property name="title">
<map>
<entity>
<key><value>yyy</value></key>
<value>xxx</value>
</entity>
<entity>
<key><value>yyy</value></key>
<value>xxx</value>
</entity>
</map>
</property>
</bean>
说明:
- 一个entity标签代表map中的一个元素
- 如果map元素的建和值都是对象,则采用ref标签进行引用
6.4、properties
- Properties类型可以理解为Map类型的特例,Map中键和值可以是任何类型,而Properties的键和值只能是String类型。
1、定义方法
public void setTitle(Properties title)
2、配置文件
<bean id="" class="">
<property name="title">
<props>
<prop key="yyy">yyy</prop>
<prop key="xxx">xxx</prop>
</props>
</property>
</bean>
说明:
- properties没有value元素标签。
6.5、集合合并
- Spring支持集合合并功能,允许子Bean继承父bean的同名属性集合元素。并将子Bean中配置的集合属性和父Bean中集合属性的同名属性值合并起来作为最终Bean的属性值
<bean id="parent" abstract="true" class="">
<property name="ZZ">
<set>
<value>xxx</value>
<value>yyy</value>
</set>
</property>
</bean>
<bean id="child" parent="parent">
<property name="ZZ">
<set merge="true">
<value>YYY</value>
<value>XXX</value>
</set>
</property>
</bean>
说明:
*子配置文件中merge="true":属性用于指定子Bean和父Bean中同名属性进行合并。如果设置为false则不会进行合并
最终子Bean集合中有4个元素
6.6、通过util命名空间配置集合Bean
- 如果配置一个集合类型的Bean而不是一个集合类型的属性,可以通过util配置
1、list集合
<util:list id="" list-class="java.util.LinkedList">
<value>xxx</value>
<value>yyy</value>
</util:list>
2、set集合
<util:set id="">
<value>xxx</value>
<value>xxx</value>
</utils:set>
3、map集合
<util:map id="">
<entity key="" value="" />
<entity key="" value="" />
</util:map>