依赖自动装配

依赖注入相关基础:依赖注入
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 注入与构造器注入,同时出现时自动装配配置失效。

依赖自动装配
https://blog.pangcy.cn/2023/04/04/后端编程相关/java/spring/依赖自动装配/
作者
ziYang | 子洋
发布于
2023年4月4日
许可协议