依赖注入相关基础:依赖注入
Spring官方文档:自动装配
什么是自动装配
IoC 容器根据 bean 所依赖的资源在容器中自动查找并注入到 bean 中的过程称为自动装配。
自动装配的方式
Service 层
使用自动装配依旧需要提供 setter 方法
1 2 3 4 5 6 7 8 9 10 11 12
| public class BookServiceImpl implements BookService, InitializingBean, DisposableBean { private BookDao bookDao;
public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; }
public void save() { System.out.println("book service save ..."); bookDao.save(); } }
|
按类型装配
在 bookService 的 bean 中,配置 autowire 属性为 byType, 配置后,会自动注入相同类型的属性。
使用byType 注入方式时,配置中必须配置有相同类型的 bean, 且不能出现重复类型的 bean,否则都会报错。
1 2 3 4 5 6 7 8
| <?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 id="bookDao" class="cn.pangcy.dao.impl.BookDaoImpl" /> <bean id="bookService" class="cn.pangcy.service.impl.BookServiceImpl" autowire="byType"/> </beans>
|
按名称装配
在 bookService 的 bean 中,配置 autowire 属性为 byName, 配置后,会自动注入相同名称 bean。
如果此时出现两个相同类型的 bean, 则只会取与 setter 方法名称相同的 bean Id 的 bean
1 2 3 4 5 6 7 8 9
| <?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 id="bookDao" class="cn.pangcy.dao.impl.BookDaoImpl" /> <bean id="bookDao1" class="cn.pangcy.dao.impl.BookDaoImpl" /> <bean id="bookService" class="cn.pangcy.service.impl.BookServiceImpl" autowire="byName"/> </beans>
|
自动装配特征
- 自动装配用于引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时( byType )必须保障容器中具有相同且唯一的 bean
- 使用按名称装配时( byName ) 必须保障容器中具有指定名称的 bean, 因变量名与配置耦合,不推荐使用
- 自动装配优先级低于 setter 注入与构造器注入,同时出现时自动装配配置失效。