IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中对的过程称为自动装配。
自动装配的方式:按类型(常用),按名称,按构造方法(不常用),不启用自动装配。
按类型
1.提供所需要实例化的构造方法
package diStudy.service.impl;
import diStudy.dao.BookDao;
import diStudy.service.BookService;
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
@Override
public void save() {
System.out.println("book service save");
bookDao.save();
}
}
2.xml中 bean标签使用autowire属性
<bean name="bookDao" class="diStudy.dao.impl.BookDaoImpl"/>
<!-- <bean name="bookService" class="diStudy.service.impl.BookServiceImpl">-->
<!-- <property name="bookDao" ref="bookDao"/>-->
<!-- </bean>-->
<bean name="bookService" class="diStudy.service.impl.BookServiceImpl" autowire="byType"/>
autowire属性:选择使用自动装载的方式。
注意事项:按类型的话,所需要实例化的对象需要已经bean装载。
必须保障容器中相同类型的bean唯一,推荐使用
按名称
1.提供所需要实例化的构造方法
2.xml中 bean标签使用autowire属性选择byName
此时是通过所需实现bean中的name属性值去对应需要标准取名setter方法去掉set第一个字母小写
。
按名称装配会有变量名和配置耦合,不推荐使用
注:自动装配不能对简单类型进行操作。
自动装配优先级低于setter注入和构造器注入,同时出现时自动装配配置失效。