Spring的依赖注入
在当前类需要用到其他类的对象,其他类的对象也是由Spring创建并将引用传递给当前类的对象的,我们只需要在配置文件中说明,说白了就是为当前类填充(也叫注入)其他类的对象
1. 能够注入的数据
能够注入的数据是指支持注入的这部分数据是可以被Spring填充(注入)到当前类的对象里的
如果是经常变化的数据,就不适合进行注入
- 基本类型和String
- 其他Bean类型(在配置文件中配置过或注解配置过的Bean)
- 复杂类型:集合类型
复杂类型分两种结构,List结构集合(数组、List、Set)和Map结构集合(Map、Properties),结构相同,注入方式相同
2. 注入的方式
注入的方式就是如何为当前类填充(注入)其他类对象的引用,或者是如何将其他类对象的引用赋值给当前类的成员变量
- 构造函数
优势:在获取Bean对象时,注入数据是必须的操作,否则对象无法创建成功
劣势:改变了Bean对象的实例化方式,是我们在创建对象时,如果用不到这些数据,也必须提供 - set方法
构造函数的优势就是set方法的劣势,构造函数的劣势就是set方法的优势 - 注解
3. 关于依赖注入的整合实例
3.1 使用构造函数方式注入基本类型、String、其他Bean类型数据
待注入的类
测试结果
3.2 使用set方法方式注入基本类型、String、其他Bean类型数据
待注入的类
测试结果
3.3 使用set方法方式注入复杂类型数据
待注入的类
beans.xml
<bean id="userService" class="com.itheima.service.impl.IUserServiceImpl">
<property name="strs">
<array>
<value>11</value>
<value>22</value>
<value>33</value>
</array>
</property>
<property name="list">
<list>
<value>11</value>
<value>22</value>
<value>33</value>
</list>
</property>
<property name="set">
<set>
<value>11</value>
<value>22</value>
<value>33</value>
</set>
</property>
<property name="map">
<map>
<entry key="a" value="b"></entry>
<entry key="c">
<value>d</value>
</entry>
</map>
</property>
<property name="prop">
<props>
<prop key="a">b</prop>
<prop key="c">d</prop>
</props>
</property>
</bean>
此时,结构相同的集合类型注入时的标签可以用同一套
<bean id="userService" class="com.itheima.service.impl.IUserServiceImpl">
<property name="strs">
<list>
<value>11</value>
<value>22</value>
<value>33</value>
</list>
</property>
<property name="list">
<list>
<value>11</value>
<value>22</value>
<value>33</value>
</list>
</property>
<property name="set">
<list>
<value>11</value>
<value>22</value>
<value>33</value>
</list>
</property>
<property name="map">
<map>
<entry key="a" value="b"></entry>
<entry key="c">
<value>d</value>
</entry>
</map>
</property>
<property name="prop">
<map>
<entry key="a" value="b"></entry>
<entry key="c">
<value>d</value>
</entry>
</map>
</property>
</bean>
测试结果