原文: https://javatutorial.net/dependency-injection-in-spring-example
在本教程中,您将学习什么是 Spring 中的依赖注入,它如何工作以及如何使用它。
什么是依赖注入?
依赖注入是您必须了解的 Spring 基础知识之一。
当您创建一个复杂的应用程序时,您将有可能使不同的对象一起工作。 理想情况下,您希望这些对象彼此独立。 此设计原则是控制反转的原则,它强调 Java 类彼此之间保持独立,然后容器会将其从对象创建和维护中解放出来。 如果您不熟悉 IoC,强烈建议您阅读关于该主题的文章。
考虑一下您将如何按照传统方法创建对象依赖关系。 您将必须创建对象类型的实例变量,然后使用构造函数和设置方法或一个(构造方法/设置方法)。 像这样:
public class Employee{
private Company company;
public Employee() {
company = new Company();
}
}
但是,当我们使用 DI 时,它将看起来像这样:
public class Employee{
private Company company;
public Employee(Company company) {
this.company= company;
}
}
您能明白为什么第二个例子更好吗? 因为现在员工无需担心公司的实现,所以它将独立于员工实现,并通过构造函数提供给员工,换句话说,是在Employee
初始化时。 换句话说,如果没有公司的一部分,员工将无法生存。 否则,他就不会当雇员。
依赖项(公司)通过构造函数注入到Employee
类中。
DI 有 2 种类型:
构造器注入
- 通过类构造函数注入时
基于 Setter 的依赖注入
- 使用 setter 方法注入时
让我们看看如何使用 setter 方法实现 DI。
基于 Setter 的依赖注入
当使用基于 setter 的注入时,容器将在调用无参数构造函数或方法实例化 bean 之后调用该类的 setter 方法。 如果您不熟悉 Spring 中的 bean,则可以阅读本文。
这是基于 setter 的 DI 的实现方式:
@Bean
public void setCompany(Company company) {
this.company = company;
}
至于使用哪种类型,通常建议对强制性依赖项使用构造器 DI,对可选性依赖项使用 setter。
多亏了 DI,现在员工类不需要查找公司,并且它既不知道位置,也不知道它的类别。