简介
- 依赖注入:Dependency Injection
* IOC的作用:降低程序之间的耦合(依赖关系)
* 依赖关系的管理:以后都交给spring来维护在当前类需要用到其他类的对象时,有spring为我们提供,我们只需要在配置文件中说明 - 依赖关系的维护就成为依赖注入:
* 能注入的数据有三类:
+ 基本类型和string
+ 其他Bean类型(在配置文件中配置过的bean)
+ 复杂类型/集合类型
* 注入的方式有三种:
+ 使用构造函数
+ 使用set方法提供
+ 使用注解提供
构造函数注入-调用构造方法提供属性
- 使用标签:constructor-arg
* 标签出现的位置,bean标签的内部
* 标签中的属性
type;用于指定要注入构造函数的类型,该数据类型也是构造函数中某些参数的类型
index:由于指定要注入数据给构造函数中指定指定索引位置的参数赋值。索引位置从0开始
name;用于给指定构造函数中指定名称参数赋值
=以上三个给值定构造函数的那个参数赋值====
value;由于提供基本类型和String类型参数的数据
ref:由于指定其他的bean累类型数据,就是指在spring的ioc核心容器中出现过得bean对象
优势:在获取对象时,注入数据是必须的操作,否则无法创建
劣势:改变了bean对象的实例化方式,是我们在创建对象时,如果用不到这些数据,也必须要提供
<bean id="accountService" class="edu.yjsj.impl.AccountServiceImpl">
<constructor-arg name="name" value="test"/>
<constructor-arg name="age" value="18"/>
<constructor-arg name="birth" ref="nowTime"/>
</bean>
<bean id="nowTime" class="java.util.Date"/>
Set方法注入-调用属性的set方法
- 涉及到的标签:
* 使用标签:constructor-arg
* 标签出现的位置,bean标签的内部
* 标签中的属性
name;用于指定注入时所调用的set方法的名称
以上三个给值定构造函数的那个参数赋值
value;由于提供基本类型和String类型参数的数据
ref:由于指定其他的bean累类型数据,就是指在spring的ioc核心容器中出现过得bean对象
优势: 创建对象时没有明确的限制可以直接使用默认构造函数
劣势: 当某个成员必须有值得时候,则获取对象时时有可能set方法没有执行
<bean id="accountService2" class="edu.yjsj.impl.AccountServiceImpl2">
<property name="name" value="test"/>
<property name="age" value="18"/>
<property name="birth" ref="nowTime"/>
</bean>
复杂类型注入/集合注入
- 用于给List集合结构注入的标签:
list array set - 用于给Map集合注入的标签:
map props
总结:结构相同的集合类型的标签可以互换没有影响,实际开发中只需要一样记一组就可以了
<bean id="accountService3" class="edu.yjsj.impl.AccountServiceImpl3">
<property name="myStr">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property>
<property name="myList">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property>
<property name="mySet">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property>
<property name="myMap">
<map>
<entry key="A" value="AAA"/>
<entry key="B" value="AAA"/>
<entry key="C" value="AAA"/>
</map>
</property>
<property name="myPros">
<props>
<prop key="A">AAA</prop>
<prop key="B">AAA</prop>
<prop key="C">AAA</prop>
</props>
</property>
</bean>
注解方法依赖注入
详情参考链接: Spring-IOC注解.