持续创作,加速成长!这是我参与「掘金日新计划 · 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进行赋值。 ref是property的属性用于将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:设定引用类型构造方法参数对应bean的id,不能与value同时使用。type:设定构造方法参数的类型,用于按类型匹配参数或进行类型校验。index:设定构造方法参数的位置,用于按位置匹配参数,参数index值从0开始计数。
与property用法基本相同,这里不再做代码演示。
集合数据类型的注入
- 这里会涉及到五个标签:
array,list,set,map,props。它们都是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配置的详解了,祝大家国庆快乐!