Spring自动装配总结
1. 一、1、例:主要类:
2.
3. publicclass CustomerServiceImpl implements CustomerService {
4. private CustomerDao customerDao;
5. private BaseDao baseDao;
6.
7. //set注入方式
8. publicvoid setCustomerDao(CustomerDao customerDao) {
9. this.customerDao = customerDao;
10.}
11.publicvoid setBaseDao(BaseDao baseDao) {
12. this.baseDao = baseDao;
13.}
14.public CustomerDao getCustomerDao() {
15. returncustomerDao;
16.}
17.public BaseDao getBaseDao() {
18. returnbaseDao;
19.}
public CustomerServiceImpl(CustomerDao customerDao, BaseDao baseDao) {
20. super();
21. System.out.println("----------------------------------------");
22. this.customerDao = customerDao;
23. this.baseDao = baseDao;
24.}
2、xml---
(1)Beanauto.xml:
<!-- autowire 自动装配bean的配置属性
autodetect
cn.csdn.hr.service.CustomerServiceImpl 有没有默认的构造 有默认的构造器就采用byType类型
如果没有则采用constructor -->
<bean id="customerServiceImpl" class="cn.csdn.hr.service.CustomerServiceImpl" autowire="autodetect"/>
<bean id="customerDaoImpl" class="cn.csdn.hr.dao.CustomerDaoImpl"/>
<bean id="baseDaoImpl" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>
(2) <!-- autowire 自动装配bean的配置属性
byName 根据名称自动装配
cn.csdn.hr.service.CustomerServiceImpl 属性名称与 bean id的名称一致的时候就自动装配
-->
<bean id="customerServiceImpl" class="cn.csdn.hr.service.CustomerServiceImpl" autowire="byName"/>
<bean id="customerDao" class="cn.csdn.hr.dao.CustomerDaoImpl"/>
<bean id="baseDao" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>
(3)、
<!-- autowire 自动装配bean的配置属性
byType根据类型自动装配
cn.csdn.hr.service.CustomerServiceImpl 属性类型 与 bean 中有相同类型的时候就自动装配
-->
<bean id="customerServiceImpl" class="cn.csdn.hr.service.CustomerServiceImpl" autowire="byType"/>
<bean id="customerDaoImpl" class="cn.csdn.hr.dao.CustomerDaoImpl"/>
<bean id="baseDaoImpl" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>
<!-- 类型冲突 -->
<bean id="customerDao" class="cn.csdn.hr.dao.CustomerDaoImpl" />
(4)、
<!-- autowire 自动装配bean的配置属性
constructor 根据类型自动装配 是构造器的参数
cn.csdn.hr.service.CustomerServiceImpl 构造器参数类型 与 bean 中有相同类型的时候就自动装配
-->
<bean id="customerServiceImpl" class="cn.csdn.hr.service.CustomerServiceImpl" autowire="constructor"/>
<bean id="customerDaoImpl" class="cn.csdn.hr.dao.CustomerDaoImpl"/>
<bean id="baseDaoImpl" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>
<!-- 类型冲突 -->
<bean id="customerDao" class="cn.csdn.hr.dao.CustomerDaoImpl" />
二、1,byName 根据属性名自动装配。此选项将检查容器并根据名字查找
与属性完全一致的bean,并将其与属性自动装配。
2、byType 如果容器中存在一个与指定属性类型相同的bean,那么将与
该属性自动装配;如果存在多个该类型bean,那么抛出异常,
并指出不能使用byType方式进行自动装配;如果没有找
到相匹配的bean,则什么事都不发生,也可以通过设置
dependency-check="objects"让Spring抛出异常。
3,constructor :通过类里提供的构造函数来装配,这个构造函数里只能提供一 个所需的属性作为参数,多了会报异常
如果容器中没有找到与构造器参数类型一致的bean,
那么抛出异常。
4,autodetect 通过bean类的自省机制(introspection)来决定是
使用constructor还是byType方式进行自动装配。
如果发现默认的构造器,那么将使用byType方式,否则采用
constructor。
5.如果没有采用自动装配机制。在定义bean的时候需要通过property来进行配置。