跳到主要内容

Spring5中文文档【4】- IOC容器之依赖关系

1. 前言

本系列基于最新5.3.10版本,大部分内容copy于官方文档…
官方文档地址
内容较杂,建议粗略过一遍,熟悉下概念即可,后续结合实际开发详解。

典型的企业应用程序肯定不止包含一个对象(或Spring 用语中的 bean)。即使是最简单的应用程序也有一些对象,它们协同工作以呈现最终用户所看到的应用程序。下一节将解释如何从定义多个独立的 bean到完全实现的应用程序,其中对象如何协作以实现目标。

1.1 依赖注入(DI)

依赖注入 (DI) 是一个过程,其中对象仅通过构造函数参数、工厂方法的参数或在对象实例被构造或从工厂方法返回。然后容器在创建 bean 时注入这些依赖项。这个过程基本上是 bean 本身的逆过程(因此得名,控制反转),通过使用类的直接构造或服务定位器模式自行控制其依赖项的实例化或位置。

DI原则使代码更清晰,当对象提供依赖关系时,解耦更有效。该对象不查找其依赖项,也不知道依赖项的位置或类。因此,您的类变得更容易测试,特别是当依赖项位于接口或抽象基类上时,这允许在单元测试中使用存根或模拟实现。

DI存在两种主要变体:基于构造函数的依赖注入基于 Setter 的依赖注入

1.1.1 基于构造函数的依赖注入

基于构造函数的 DI 是通过容器调用具有多个参数的构造函数来完成的,每个参数代表一个依赖项。调用static带有特定参数的工厂方法来构造 bean 几乎是等效的,本讨论将static类似地处理构造函数和工厂方法的参数。

以下示例显示了UserInfo类依赖一个Dept属性,通过构造函数注入:

@Data
public class UserInfo {



public UserInfo() {


}

String username;

Integer pwd;

Dept dept;

public UserInfo(Dept dept) {


this.dept = dept;
}
}