Spring IoC配置详解

152 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

前言

上一篇文章我介绍了概述以及IoC的基本使用,在IoC的xml配置文件中,我们知道了怎么配置需要的对象,其中简单介绍了<bean>标签和<property>标签。这篇文章,我将更加详细的介绍下IoC容器的配置文件。

配置文件

bean

  • 通过配置bean标签来进行对象的管理。
  • id:对象名。
  • class:对应着对象的模板类。
  • 注意:所有使用IoC进行管理的对象,都必须具有无参构造

这里我来解释一下,为什么使用IoC进行管理的对象都必须具有无参构造呢?这就要涉及到Spring的底层原理了,Spring底层应用的是反射机制来创建的对象,调用的是无参构造函数。

property

  • property标签是bean的子标签,对象的成员变量通过property标签进行赋值。
  • name:对象的成员变量名。
  • value:对象的成员变量值。
  • 注意value只能用于基本数据类型和String类型的成员变量赋值,其他的引用数据类型不能用value进行赋值。
  • refproperty的属性用于将IoC容器中另一个bean赋给当前的成员变量。这里实际上就是依赖注入(DI)。(有点那种俄罗斯套娃的感觉。)

给Dog类添加一个主人(host)的成员变量:

package com.xyj;

import lombok.Data;

@Data
public class Dog {
    private String name;
    private int age;
    private String variety;
    private Host host;
}

创建一个主人Host的类:

package com.xyj;

import lombok.Data;

@Data
public class Host {
    private String name;
    private int age;
}

然后我们需要为主人创建一个bean容器并为主人的成员变量进行赋值:

<bean id="host" class="com.xyj.Host">
    <property name="name" value="xyj"></property>
    <property name="age" value="21"></property>
</bean>

这时候,我们要将host的bean注入到dog的bean中,就需要用到ref属性而不是value属性了。

<bean id="dog" class="com.xyj.Dog">
    <property name="name" value="bob"></property>
    <property name="age" value="5"></property>
    <property name="variety" value="秋田"></property>
    <property name="host" ref="host"></property>
</bean>

打印信息

Dog(name=bob, age=5, variety=秋田, host=Host(name=xyj, age=21))
  • 注意:同一个property标签中,value属性和ref属性并不可以同时使用。

constructor-arg

  • constructor-arg也是bean的子标签,作用是使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作。
  • name:对应bean中的构造方法所携带的参数名。
  • value:设定非引用类型构造方法参数对应的值,不能与ref同时使用。
  • ref:设定引用类型构造方法参数对应beanid ,不能与value同时使用。
  • type :设定构造方法参数的类型,用于按类型匹配参数或进行类型校验。
  • index :设定构造方法参数的位置,用于按位置匹配参数,参数index值从0开始计数。

property用法基本相同,这里不再做代码演示。

集合数据类型的注入

  • 这里会涉及到五个标签:arraylistsetmapprops。它们都是property标签或constructor-arg标签的子标签。
  • 作用:注入集合数据类型属性。

array

<property name="arr">
    <array>
        <value>富强</value>
        <value>民主</value>
    </array>
</property>

list

<property name="list">
    <list>
        <value>文明</value>
        <value>和谐</value>
    </list>
</property>

set

<property name="set">
     <set>
         <value>自由</value>
         <value>平等</value>
     </set>
</property>

map

<property name="map">
    <map>
        <entry key="name" value="公正"/>
        <entry key="value" value="法治"/>
    </map>
</property> 

props

<property name="properties">
    <props>
        <prop key="name">爱国</prop>
        <prop key="value">敬业</prop>
    </props>
</property> 

以上就是关于IoC配置的详解了,祝大家国庆快乐!