自动装配
- IoC 容器根据 bean 所依赖的资源在容器中自动查找并注入到 bean 中的过程称为自动装配
自动装配有下面几种方式
- 按类型(常用)
- 按名称
- 按构造方法
- 不启用自动装配
自动装配只需要修改 applicationContext.xml 配置文件即可:
(1)将<property>标签删除
(2)在<bean>标签中添加 autowire 属性
首先来实现按照类型注入的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.itheima.dao.impl.BookDaoImpl"/>
<!--autowire属性:开启自动装配,通常使用按类型装配-->
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
</beans>
注意事项:
- 需要注入属性的类中对应属性的 setter 方法不能省略
- 被注入的对象必须要被 Spring 的 IOC 容器管理
- 按照类型在 Spring 的 IOC 容器中如果找到多个对象,会报
NoUniqueBeanDefinitionException
配置特征:
- 自动装配用于引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保障容器中相同类型的 bean 唯一,推荐使用
- 使用按名称装配时(byName)必须保障容器中具有指定名称的 bean,因变量名与配置耦合,不推荐使用
- 自动装配优先级低于 setter 注入与构造器注入,同时出现时自动装配配置失效
集合注入
常见数据类型
- 数组
<property name="array"> <array> <value>100</value> <value>200</value> <value>300</value> </array> </property> - List
<property name="list"> <list> <value>itcast</value> <value>itheima</value> <value>boxuegu</value> <value>chuanzhihui</value> </list> </property> - Set
<property name="set"> <set> <value>itcast</value> <value>itheima</value> <value>boxuegu</value> <value>boxuegu</value> </set> </property> - Map
<property name="map"> <map> <entry key="country" value="china"/> <entry key="province" value="henan"/> <entry key="city" value="kaifeng"/> </map> </property> - Properties
<property name="properties"> <props> <prop key="country">china</prop> <prop key="province">henan</prop> <prop key="city">kaifeng</prop> </props> </property>
说明:
- property 标签表示 setter 方式注入,构造方式注入 constructor-arg 标签内部也可以写
<array>、<list>、<set>、<map>、<props>标签 - List 的底层也是通过数组实现的,所以
<list>和<array>标签是可以混用 - 集合中要添加引用类型,只需要把
<value>标签改成<ref>标签,这种方式用的比较少