IOC(控制反转)的作用:降低程序之间的耦合度(依赖关系)。
在Java中,依赖关系的管理都交给spring来维护。当当前类需要用到其他类的对象时,由spring来为我们提供,我们只需要在配置文件当中进行说明。
依赖关系的维护就称为依赖注入。
一共有三类数据可以注入:基本类型和String、其他bean类型、复杂类型/集合类型。
注入方法有三种:构造函数、set方法、使用注解提供。
经常变化的数据并不适用于注入的方式。
构造函数注入
使用的标签:constructor-arg
出现的位置:bean标签的内部
属性:
type:用于指定要注入数据的数据类型,该数据类型也是构造函数当中某个或者某些参数的类型。
<bean id="唯一标识" factory-bean="工厂名" factory-method="方法名" >
<constructor-arg type="java.lang.String" value="test"> </constructor-arg>
</bean>
上述代码指的是将“text”注入给构造函数中string类型的参数,必须配合下列参数进行使用
index:要注入的数据给构造函数中指定的位置,index表示位置参数,从0开始。
name:要注入的数据给构造函数中指定的名称,name表示名称。
value:用于提供基本类型和string类型的数据。
ref:用于指定其他的bean类型的数据,它指的是在springIOC核心容器中出现过的bean对象。
优势:
1、在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。
2、改变了bean对象的实例化方法。我们在创建对象时,如果用不到这些数据也必须提供。
set方法注入
使用的标签:property
出现的位置:bean标签的内部
标签的属性:
name 指定注入时所使用的set方法的名称
value 用于提供基本类型和string类型的数据
ref 用于指定其他bean类型的数据,指的是spring中的ioc核心容器中出现过的bean对象。
例:
<bean id="唯一标识" factory-bean="工厂名" factory-method="方法名" >
<property name="name" value="zby"></property>
</bean>
将“zby”注入给以setName为方法名的函数。要去掉set并且将Name的大写改为小写。
优势:创建对象时没有明确的限制,可以直接使用默认构造函数。
弱势:如果有某个成员必须有值,那么获取对象有可能set方法未执行。
注入集合数据
当方法的参数是集合类型的数据时,使用这种方法。
外层标签使用property
用于给list结构集合注入的标签:list array set
用于给map结构集合注入的标签:map props
结构相同,标签可以互换。