Spring依赖注入
文章目录
- 1、依赖注入方式
- 1.1、setter注入
- 1.2、构造器注入
- 2、自动装配
- 3、集合注入
1、依赖注入方式
- setter注入
简单类型
引用类型(很常用) - 构造器注入
简单类型
引用类型
1.1、setter注入
引用类型
1、在bean中定义引用类型属性并提供可访问的set方法
public class BookServiceImpl implements BookService{private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}
}
配置中使用property标签ref属性注入引用类型对象 (references)
<bean id="bookService" class="com.demo.service.impl.BookServiceImpl"><property name="bookDao" ref="bookDao"/></bean>
</bean>
<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"/>
简单类型
1、在bean中定义简单类型属性并提供可访问的set方法
public class BookDaoImpl implements BookDao {private int number;public void setNumber(int number) {this.number= number;}
}
2、配置中使用property标签value属性注入简单类型数据
<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"><property name="number" value="10"/>
</bean>
1.2、构造器注入
引用类型
1、在bean中定义引用类型属性并提供可访问的构造方法
public class BookServiceImpl implements BookService{private BookDao bookDao;public BookServiceImpl(BookDao bookDao) {this.bookDao = bookDao;}
}
2、配置中使用constructor-arg标签ref属性注入引用类型对象
<bean id="bookService" class="com.demo.service.impl.BookServiceImpl"><constructor-arg name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
简单注入
1、bean中定义简单类型的属性并提供构造方法方法
public class BookDaoImpl implements BookDao {private int connectionNumber;private String databaseName;public BookDaoImpl(int connectionNumber, String databaseName) {this.connectionNumber = connectionNumber;this. databaseName = databaseName;}
}
2、配置中使用constructor-arg标签value属性注入简单类型对象
<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"><constructor-arg name="connectionNumber" value="10"/><constructor-arg name=“databaseName" value="mysql"/>
</bean>
2、自动装配
自动装配概念
- IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
- 自动装配方式
- 按名称
- 按构造方法
- 不启用自动装配
依赖自动装配
- 配置中使用bean标签autowire属性设置自动装配的类型
<bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.demo.service.impl.BookServiceImpl" autowire="byType"/>
依赖自动装配特征
- 自动装配用于引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
- 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,不推荐使用
- 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
<bean id="bookDao1" class="com.demo.dao.impl.BookDaoImpl"><constructor-arg type="int" value="10"/><constructor-arg type="java.lang.String" value="mysql"/>
</bean><bean id="bookDao" class="com.demo.dao.impl.BookDaoImpl"><constructor-arg type="int" value="20"/><constructor-arg type="java.lang.String" value="oracle"/>
</bean><bean id="bookService" class="com.demo.service.impl.BookServiceImpl" autowire="byName">
</bean>
3、集合注入
注入数组类型数据
<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>标签