其实控制反转也是一种设计模式,只是其出现的比较晚,所以GOF中并没有该模式
ioc的实现方式
控制反转是面向对象编程的一种设计模式,用来降低代码之间的耦合度,其最常见的实现方式是依赖注入(简称DI)
还有一种方式是依赖查找(简称DL)
什么是控制反转呢?
大多数程序都是有一些以来关系, 比如A类里要用到B,这个过程叫获取合作对象,B是A的合作对象,也是A的依赖,正常的情况下A可以直接在其方方法中来new 一个B, 这样就是正向控制,由A控制生产B,但是这样有一个缺点就是耦合性很强,如果想把B换成C 就需要去改代码,控制反转就是直接不用你A来自己创建B,而是外部给你传
,当然 如果一个外部类给你直接传,那样还是会有一些耦合度,因为它要是想给你传C,那么它就得改代码。
为了解决这个问题,就出现了依赖注入跟依赖查询, spring只用依赖注入
那么什么是依赖注入呢?
我们用的轻量级控制反转框架SPRING就是运用依赖注入来实现控制反转的,它通过XML保存bean的类名之类的,
有了这些类名,就能用反射去创建实例了,负责管理这些实例的创建啊,生命周期啊,依赖啊这些东西的功能模块我们管他叫IOC容器。IOC就是工厂模式模式的升华。
依赖注入组件不做查询,只提供普通的JAVA方发让容器去觉得依赖关系,由IOC同期全权负责组件的装配,它会把符合依赖关系的对象通过javaBean属性或构造函数传递给需要的对象,
这里你能看出反射的牛逼之处,有文字就能找到类,就能创建出实例来,改XML比改代码方便,耦合性低,反射技术之前没有普及是因为其速度比new慢是被,但是经过SUN改良以后,速度只差一倍多
那什么是依赖查找呢?
容器提供回调接口和上下文条件给组件。组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在那些回调方法上(也就是上面所说的 类型1):容器将调用这些回调方法,从而让应用代码获得相关资源。
