阅读258 返回首页    go 阿里云 go 技术社区[云栖]


Spring的IOC容器

一:先解释IOC
IOC:通常叫做控制反转,依赖注入,好莱坞原则
二:以依赖注入这个角度来阐述IOC。
在没有IOC的场景下是:被注入的对象会直接依赖于被依赖对象。
在IOC的情况下,被注入的对象和依赖对象二者之间通过IOC Service Provider来打交道,所有的被注入对象和依赖对象由IOC Service Provider统一管理。 谈到这里IOC Service Provider 就是通常的IOC容器所充当的角色。
三:总结
从被注入对象的角度看,与之前直接寻求依赖对象相比,依赖对象的取得方式发生了反转;控制也从被注入对象转到了IOC Service Provider哪里。说的简单朴素一点,原来需要的什么东西需要自己去拿,现在需要什么东西就让IOC送过来。
作为被注入对象,要想让IOC Service Provider为其提供服务,并将所需要的被依赖对象送过来,也需要通过某种方式通知对方,那么这个被依赖对象又通过哪些方式来通知IOC Service Provider为其提供服务呢?那么这就是三种依赖注入的方式:1:构造方法注入,2:setter注入,3:接口注入
如果用一句话来概括IOC可以带给我们什么?那么我们希望是IOC是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式。
虽然业务对象可以通过三种IOC方式声明相应的依赖,但是最终任然都会通过某种角色或服务将这些相互依赖的对象绑定到一起,而IOC Service Provider就对应IOC场景中的这一角色,换句换来解释就是:IOC容器指代将IOC场景中的业务对象绑定在一起的实现方式。说到这里Spring IOC容器就是一个提供依赖注入服务的IOC Service Provider。
IOC Service Provider的职责:主要有两个:1:业务对象的构建管理。2:业务对象间的依赖绑定。
1:业务对象的构建管理:IOC Service Provider需要将对象的构建逻辑从客户端对象那里剥离出来。什么是客户端对象?举例:Service层就是DAO层的客户端对象。
2:业务对象间的依赖绑定:对于IOC Service Provider来说,如果这个职责不完成,无论业务对象如何呼喊,也不会得到依赖对象的响应,还要收到一个NPE给你。那么IOC Service Provider通过结合之前构建和管理的所有业务对象,以及各个业务对象之间可以识别的依赖关系,将这些对象所依赖的对象注入绑定,从而保证每个业务对象在使用的时候,可以处于就绪状态。

 IOC Service Provider如何管理对象间的依赖关系的呢?
 说到底IOC Service Provider不是人类,不会有记忆功能,那么肯定就是通过某种方式来记录对象之间的关系。有三种方式:1:直接编码方式。2:配置文件方式。3:元数据方式。

最后更新:2017-06-05 23:31:34

  上一篇:go  【资料合集】首届互联网新兵进阶在线峰会:讲义PDF+活动视频!(持续更新)
  下一篇:go  阿里内核月报2014年3月