> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/ji-chu/spring/basic/core/yi-lai-zhu-ru-di.md).

# 依赖注入（DI）

任何一个有实际意义的应用都会由两个或者更多的类组成，这些类相互之间进行协作来完成特定的业务逻辑。按照传统的做法，每个对象负责管理与自己相互协作的对象（即它所依赖的对象）的引用，这将会导致高度耦合和难以测试的代码。

<mark style="background-color:blue;">**通过 DI，对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系，依赖关系将被自动注入到需要它们的对象当中去。**</mark>

> IoC（Inversion of Control，即“控制反转”），**不是什么技术，而是一种设计思想**。<mark style="background-color:blue;">**在 Java 开发中，IoC意味着将对象交给容器控制，而不是传统的由对象自身直接控制。**</mark>
>
> “反转”指的是由 IoC 容器查找并注入依赖对象，对象只是被动的接受依赖对象。
>
> IoC 很好的体现了面向对象设计法则之一—— **好莱坞法则：“别找我们，我们找你”**；即由 IoC 容器帮对象找相应的依赖对象并注入，而不是由对象主动去找。
>
> 控制反转是通过依赖注入实现的，它们是同一个概念的不同角度描述。通俗来说就是 <mark style="color:blue;">**IoC 是设计思想，DI 是实现方式**</mark><mark style="color:blue;">。</mark>
