一、概念1、容器:字面上理解就是装东西的东西常见的变量、对象属性等都可以算是容器一个容器能够装什么,全部取决于你对该容器的定义当然,现在我们讨论的是这样一种容器,它存放的不是文本、数值,而是对象、对象的描述(类、接口)或者是提供对象的回调(闭包),通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 “解耦”、“依赖注入”。
2、IoC - Inversion of Control 控制反转 控制反转是从容器的角度在描述,即:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源 3、DI - Dependency Injection 依赖注入 。
依赖注入是从应用程序的角度在描述,可以把依赖注入,即:应用程序依赖容器创建并注入它所需要的外部资源备注:依赖注入和控制反转说的是同一个东西,是一种设计模式,这种设计模式用来减少程序间的耦合,从某个方面讲,就是它们描述的角度不同。
二、依赖注入的原理一般情况下,当存在类与类之间的依赖关系的时候,我们都是通过直接实例化的方式进行调用一旦出现多层依赖,这种方式的耦合程度就很高,在需要修改其中一个类的时候,会牵扯很多依赖它的类的修改,因此对代码的改动会比较大。
下面简单举一个A->B->C三层依赖的关系解释怎么运用依赖注入来解耦,提高开发效率。
而依赖注入方式如下:
解析:常规写法里面,一旦C类需要作出改变,或者B类的调用需要改变成D类的时候,还需要考虑到依赖自己的B类,即还需要对B类作出修改依赖注入的思想就是即用即实例,反转类与类之间的控制关系,实现由调用类A类控制后续的依赖关系,这样可以让B类随意的更改所需依赖和实例化的类(C类或D类),达到解耦的目的。
三、常用的依赖注入方式:1、构造方法注入;2、set属性注入;3、静态工厂方法注入;上述的例子使用的就是构造方法注入的方式,将对象作为参数传递到构造方法中;同样的set属性注入也是相类似的方法,不同的仅仅是在set一个类的成员的属性时传递这个对象参数,在此就不一一举例了。
除此之外,还有静态工厂方法注入的方式,这种方法与静态工厂方法类似我们知道静态工厂方法就是通过一个类来管理需要实例化的多个相似的类,该类会定义一个方法用于获取需要实例化的对象,而具体要实例化哪个对象就依赖于传递进来的对象名参数了。
对于静态工厂方式的注入,与一般的静态工厂方法不同之处在于这个传进来的参数是一个已经实例化过的对象
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。