一、概述
IOC(控制反转)负责对象的创建。
本文介绍的DI(依赖注入),负责对象创建后,属性的赋值。通过xml的配置,代替写代码为对象属性赋值。
二、注入方法
2.1 set方法注入
2.1.1 Spring内置类型注入
基本类型
<property name="id" value="1"></property>
list类型
<property name="jobs">
<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="1" value="蝙蝠侠"></entry>
<entry key="2" value="雷神"></entry>
<entry key="3" value="美国队长"></entry>
<entry key="4" value="绿巨人"></entry>
</map>
</property>
property类型
<property name="prop">
<props>
<prop key="1">1</prop>
<prop key="2">2</prop>
</props>
</property>
2.1.2 自定义类型注入
<property name="dog" ref="dog"></property>
2.1.3 自定义类型注入,自动装配方法
配置全局自动装配
default-autowire="byName"
指定bean配置自动装配
<bean id="hero" class="com.dreamguard.domain.Hero" autowire="byName">
自动装配的两种方式
byName:根据javabean中需要注入的属性的名字 ,在spring容器中找对应id的<bean>将该<bean>的对象复制给 当前的属性
byType:根据javabean中需要注入的属性的类型,在spring容器中找对应class类型的<bean>将该<bean>的对象复制给 当前的属性
**byType方式 根据类型进行匹配,可能匹配到多个<bean>,此时会抛出异常。而byName是通过id来寻找<bean>,id没有重复,不会有这方面的问题,所以推荐使用byName方式
2.2 构造方法注入(不常用)
暂不介绍,可在给出的代码,了解使用
完整代码下载
https://github.com/hailindai/SpringSample