首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

依赖注入和Butter Knife源码分析(1)

依赖注入和Butter Knife源码分析(1)

一、控制反转和依赖注入:

两图的区别:

(1)图一有高度的耦合性,多个对象相互依赖,如果ObjectA想让ObjectB跟随自己转动应该怎么做?
在ObjectA中创建一个ObjectB的对象,然后调用ObjectB的某个方法进行转动。ObjectA主动控制ObjectB的创建和行为。
(2)图二在ABCD中创建了一个第三方容器,第三方容器控制ObjectA、B、C、D的创建和转动。如果ObjectA想让ObjectB跟随自己转动应该怎么做?
A告诉第三方容器,让第三方容器去创建ObjectB,并且让ObjectB进行转动。
(3)对比:图一控制权在自身,图二控制权在IOC容器,降低了多个对象之间的耦合性。这就是控制反转的思想。

1、控制反转(IOC):
Ioc—Inversion of Control,即“控制反转”。控制反转是种设计思想,将你设计好的对象交给容器控制,而不是在你对象内部直接控制。

    控制什么?控制了外部资源获取,比如对象创建、文件读取等。
    什么反转了?依赖对象的获取反转了。ObjectB依赖于ObjectA。之前是ObjectA想获取ObjectB由自身控制,现在ObjectA获取ObjectB由IOC容器控制。

2、依赖注入(DI):
DI—Dependency Injection,即“依赖注入”。组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件之中。 谁依赖谁?某个对象依赖于IOC容器 谁注入谁?IOC容器提供资源,将资源注入到某个需要的对象中。

3、控制反转和依赖注入的关系:
同一思想的不同说法。资源获取的主动索取变成被注入。

4、依赖注入的实现:

    基于接口:定义接口,提供给IOC容器来传入自身所需要的对象
    基于set方法:通过方法提供给IOC容器来传入自身所需要的对象
    基于构造函数:通过构造提供给IOC容器来传入自身所需要的对象
    基于注解:通过注解,生成方法,给IOC容器来传入自身所需要的对象
返回列表