Spring 入门学习 —— IOC 的基本概念(二)(IOC 依赖对象注入方式)

126 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

上一篇文章说明了IOC 的本质,IOC 容器就是来管理着各个对象及其依赖关系。如果一个对象依赖另一个对象,那么直接使用IOC 容器就可以很好地处理两个对象之间的依赖关系了。

这篇文章我们继续介绍IOC 的概念的同时,会开始讲解如何将对象进行“依赖注入”。

依赖注入的概念

我们继续使用上一篇文章中的例子,如果你想在海边生活,那么你是需要表达“在海边生活,我需要一所房子”这个意愿的。不论是自己去造一套房子、买一套房子,还是别人造好房子送给你,我们都需要知道如何表达需求

回到IOC 容器的概念中,在一个对象表达完它需要另一个对象的需求之后,才能让IOC 容器来为其提供对应的服务。

这里其实就是要表达一个“依赖”的需求,然后IOC 会将依赖对象“注入”到这个需要被注入的对象中。

对应的依赖注入方式,一共有三种,即:

  1. 构造方法注入(constructor injection)
  2. setter 方法注入(setter injection)
  3. 接口注入(interface injection)

接下来我们来对这三种依赖注入方式做具体的分析。

构造方法注入

这种方式其实是我们日常开发中比较常用的一种方式,顾名思义,就是通过构造方法,将被依赖的对象注入到所需对象中去。

完成注入的方式就是,被注入的对象,通过其对应的类的构造方法中声明的依赖的参数列表,让外部(就是IOC 容器)知道它需要哪些依赖的对象,这样就好了。

如:

public Test(Dep1 dep1, Dep2 dep2) {
    this.dep1 = dep1;
    this.dep2 = dep2;
}

只要声明了上述的构造方法,即可支持构造方法依赖注入。

声明之后,IOC Service Provider 会去检查被注入对象的构造方法是什么,检查构造方法声明的参数列表,从而获知这个对象所依赖的对象列表,然后就可以为其注入相应的对象了。