原文: https://javatutorial.net/dependency-injection-in-spring-example

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

Spring 示例中的依赖注入 - 图1

什么是依赖注入?

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

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

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

  1. public class Employee{
  2. private Company company;
  3. public Employee() {
  4. company = new Company();
  5. }
  6. }

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

  1. public class Employee{
  2. private Company company;
  3. public Employee(Company company) {
  4. this.company= company;
  5. }
  6. }

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

依赖项(公司)通过构造函数注入到Employee类中。

DI 有 2 种类型:

  1. 构造器注入

    1. 通过类构造函数注入时
  2. 基于 Setter 的依赖注入

    1. 使用 setter 方法注入时

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

基于 Setter 的依赖注入

当使用基于 setter 的注入时,容器将在调用无参数构造函数或方法实例化 bean 之后调用该类的 setter 方法。 如果您不熟悉 Spring 中的 bean,则可以阅读本文

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

  1. @Bean
  2. public void setCompany(Company company) {
  3. this.company = company;
  4. }

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

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