Spring 系列 - IoC 基本概念
Publish date: Oct 109, 10119
Last updated: Oct 219, 21029
Last updated: Oct 219, 21029
问
Spring 中 IoC 指的是什么?
Spring IoC 支持几种依赖注入方式?分别是什么?它们的优缺点?
答
IoC 的基本概念
即 Inversion of Control,中文 控制反转,别名 依赖注入 (Dependency Injection)
理念:
让别人为你服务,让原来的事必躬亲,转变为现在的享受服务
含义:
通常来说,被注入对象 直接依赖 被依赖对象
控制反转后,被注入对象 只需要从 IoC容器 那里获取 被依赖对象
注入方式
构造方法注入
被注入对象 通过在构造方法中声明 依赖对象 的参数列表,让外部知道其需要哪些 依赖对象
优点
对象在构造完后,就能进入就绪状态,被外部使用
缺点
当依赖对象比较多时,构造方法的参数列表较长。
通过反射构造对象时,对相同类型的参数处理会困难,维护使用麻烦
构造方法无法被继承,无法设置默认值
setter 方法注入
被注入对象 为其依赖对象对应的属性添加 setter 方法,让外部知道其需要哪些 依赖对象
优点
- 在描述性上比 狗早方法注入 好
- setter 方法可以被继承,允许设置默认值
缺点
对象无法在构造完成后进入就绪状态,不能被立马使用
接口注入
被注入对象 需要实现某个接口,外部通过这些接口的 参数类型 来了解其需要哪些 依赖对象
优点
基本处于 “退役” 状态
缺点
强制 被注入对象 实现不必要的接口,带有侵入性,不提倡
参考文章
Inversion of Control Containers and the Dependency Injection pattern