本篇内容:
  • 1、参数注入字面值
  • 2、参数引用其他Bean
  • 3、参数注入内部Bean
  • 4、参数注入null
  • 5、参数注入级联属性
  • 6、参数注入集合类型数据:List,Set,Map,集合合并,通过util命名空间

一、字面值

  • 可用字符串表示的值,可用通过元素标签进行注入,默认情况下基本数据类型及封装类,String等类型都可用采用字面值注入方式。
  • Spring容器在内部为字面值提供了编辑器,可用将字符表示的字面值转换为内部变量的相应类型。Spring允许用户注册自定义的编辑器,处理其他类型属性注入时的转换工作。
<bean id="car" class="com.demo.Car">
        <property name="title">
            <value><![CDATA[雷克萨斯 &ES]]></value>
        </proprtey>
    </bean>
  • 说明:
  • 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、元素

有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值
<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 都可以使用list方式注入数据
  • 实体方法:public void setTitle(List 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>