IOC

什么是IOC?

控制反转(Inversion of Control),也叫做依赖注入DI(Dependency Injection)

控制反转的由来?

软件系统在没有引入IOC容器之前,假如对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

依赖注入的由来?

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。

控制反转和依赖注入的关系?

依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情。

解决的问题

解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”

没有IOC时

在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。

有IOC时

当对象A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。

核心

IOC中最基本的技术就是“反射(Reflection)”编程

IOC容器

IOC容器就是一个对象制造工厂,你需要什么,它创建好会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象

缺点

反射方式生成对象和通常对象生成方式,大约为1-2倍的差距。

posted @ 2019-07-04 15:16  马崮蚂蚁哥  阅读(347)  评论(0编辑  收藏  举报