💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Spring 示例中的依赖注入 > 原文: [https://javatutorial.net/dependency-injection-in-spring-example](https://javatutorial.net/dependency-injection-in-spring-example) 在本教程中,您将学习什么是 Spring 中的依赖注入,它如何工作以及如何使用它。 ![spring-featured-image](https://img.kancloud.cn/64/23/64231db4bf6e880066d0d4c2e31ac166_780x330.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,现在员工类不需要查找公司,并且它既不知道位置,也不知道它的类别。