# Spring 示例中的依赖注入

> 原文： [https://javatutorial.net/dependency-injection-in-spring-example](https://javatutorial.net/dependency-injection-in-spring-example)

在本教程中，您将学习什么是 Spring 中的依赖注入，它如何工作以及如何使用它。

![spring-featured-image](img/d2f73752d8ae931b119dec1eac866973.jpg)

## 什么是依赖注入？

依赖注入是您必须了解的 Spring 基础知识之一。

当您创建一个复杂的应用程序时，您将有可能使不同的对象一起工作。 理想情况下，您希望这些对象彼此独立。 此设计原则是控制反转的原则，它强调 Java 类彼此之间保持独立，然后容器会将其从对象创建和维护中解放出来。 如果您不熟悉 IoC，强烈建议您阅读[关于该主题的文章](https://javatutorial.net/ioc-in-spring)。

考虑一下您将如何按照传统方法创建对象依赖关系。 您将必须创建对象类型的实例变量，然后使用构造函数和设置方法或一个（构造方法/设置方法）。 像这样：

```java
public class Employee{
	private Company company;

	public Employee() {
		company = new Company();
	}
}
```

但是，当我们使用 DI 时，它将看起来像这样：

```java
public class Employee{
	private Company company;

	public Employee(Company company) {
		this.company= company;
	}
}
```

您能明白为什么第二个例子更好吗？ 因为现在员工无需担心公司的实现，所以它将独立于员工实现，并通过构造函数提供给员工，换句话说，是在`Employee`初始化时。 换句话说，如果没有公司的一部分，员工将无法生存。 否则，他就不会当雇员。

依赖项（公司）通过构造函数注入到`Employee`类中。

DI 有 2 种类型：

1.  构造器注入
    1.  通过类构造函数注入时
2.  基于 Setter 的依赖注入
    1.  使用 setter 方法注入时

让我们看看如何使用 setter 方法实现 DI。

## 基于 Setter 的依赖注入

当使用基于 setter 的注入时，容器将在调用无参数构造函数或方法实例化 bean 之后调用该类的 setter 方法。 如果您不熟悉 Spring 中的 bean，则可以阅读[本文](https://javatutorial.net/introduction-to-spring-bean)。

这是基于 setter 的 DI 的实现方式：

```java
@Bean
public void setCompany(Company company) {
   this.company = company;
}
```

至于使用哪种类型，通常建议对强制性依赖项使用构造器 DI，对可选性依赖项使用 setter。

多亏了 DI，现在员工类不需要查找公司，并且它既不知道位置，也不知道它的类别。