依赖注入方式
setter 注入
简单类型
在bean中定义引用类型属性并提供可访问的 set 方法
public class BookDaoImpl implements BookDao { private int connectionNum; public void setConnectionNum(int connectionNum) { this.connectionNum = connectionNum; } }
配置中使用 property 标签 value 属性注入简单类型数据
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <property name="connectionNum" value="100"/> </bean>
引用类型
在 bean 中定义引用属性类型并提供可访问的 set 方法
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean { private BookDao bookDao; public void setBookDao(BookDaoImpl bookDao) { this.bookDao = bookDao; } }
配置中使用 property 标签 ref 属性注入引用类型对象
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <property name="bookDao" ref="bookDao" /> </bean>
构造器注入
简单类型(了解)
在 bean 中定义引用类型属性并提供可访问的 set 方法
public class BookDaoImpl implements BookDao { private int connectionNum; public void setConnectionNum(int connectionNum) { this.connectionNum = connectionNum; } }
配置中使用 constructor - arg 标签 value 属性注入简单数据类型
<bean id="bookDao" class="com.itheima.dao.impl.BookImpl"> <constructor - arg name="connectionNumber" value="10"/> </bean>
引用类型(了解)
在 bean 中定义引用类型数据并提供可访问的构造方法
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean { private BookDao bookDao; public BookServiceImpl(BookDao bookDao) { this.bookDao = bookDao; } }
配置中使用 constructor - arg 标签 ref 属性注入引用类型对象
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <constructor-arg name="bookDao" ref="bookDao" /> </bean> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
构造器注入 —— 参数适配 (了解)
配置中使用 constructor - arg 标签 type 属性设置按形参类型注入
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <constructor-arg type="int" value="10" /> <constructor-arg type="java.lang.String" value="mysql" /> </bean>
配置中使用 constructor - arg 标签 index 属性设置按形参类型注入
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <constructor-arg index="0" value="10" /> <constructor-arg index="1" value="mysql" /> </bean>
依赖自动装配
IoC容器根据 bean 所依赖的资源在容器中自动查找并注入到 bean 中的过程成为自动装配
自动装配方式
- 按类型 (常用)
- 按名称
- 按构造方法
- 不启动自动装配
配置中使用 bean 标签 autowire 属性设置自动装配的类型
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autoWire="byType" />
依赖自动装配 特征
- 自动装配适用于引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保障容器中相同类型的 bean 唯一。
- 自动装配优先级低于 setter 注入与构造器注入,同时出现时自动装配配置失效
注入集合对象
注入 properties 对象
<property name="properties"> <props> <prop key="county">ss</prop> <prop key="province">sss</prop> <prop key="city">ssss</prop> </props> </property>