面试题思考:IOC的优缺点

先讲重点  面试时怎么答:

先把IOC的概念说出来

依赖注入和控制反转

所谓的依赖注入是甲方开放接口,在它需要的时候,能够将乙方传递进来(注入);所谓的控制反转,甲乙双方不相互依赖,交易活动的进行不依赖于甲乙任何一方,整个活动的进行由第三方负责管理。这就是spring IoC的思想所在。

然后说优缺点

IOC的优点:实现组件之间的解耦,提高程序的灵活性和可维护性。
IOC的缺点:
1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。
------------------------------------------------------------------------------------------------

 IOC(Inversion of Control)控制反转,将控制权(创建对象和对象之间的依赖关系的权利)交给spring容器。

接口驱动设计(Interface Driven Design)的好处,可以灵活提供不同的子类实现(其实就是解耦),提高程序的灵活性、可扩展性和可维护性。

IOC模式将耦合代码从程序中移出,放到统一的XML文件中管理。

由IOC容器通过配置文件来管理对象的生命周期、依赖关系等,这样就不用重新修改并编译具体的代码,从而实现组件之间的解耦。

轻量级IOC容器:Pico Container、Avalon、Spring、HiveMind等。

超重量级IOC容器:EJB。

半轻半重IOC容器:JBoss,Jdon等。
反射:就是将Java类中的各种成分映射成相应的Java类。
通俗的说,反射就是根据给出的字符串(类名等)来生成对象。
反射的好处就是可以临时决定要生成哪一种对象,缺点就是生成对象较慢。
IOC的优点:实现组件之间的解耦,提高程序的灵活性和可维护性。
IOC的缺点:
1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。
---------------------------------------------------------------------------

简析Spring IoC的原理与优点

若要理解Spring IoC的优点,首先要理解控制反转的思想。控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统(IOC容器),将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

控制是否被反转其实正是框架和库(Framework and Library)的区别。

客户程序员使用库,框架使用客户程序员。

对于一个库而言,用户程序员使用的方式是主动调用它,这是通常情况的做法,也就是“正向”控制;而对于一个框架,往往将用户程序员编写的代码注册到框架中,最后由框架来调用用户程序员编写的代码,这就构成了控制反转。也就是说,控制反转的关键在于“控制者”是谁。对于一个库而言,复用的可能只是算法和数据结构;而对于一个框架而言,复用的往往还有控制流逻辑,这也是控制反转的结果。

通过以上的描述,可以看到似乎有点回调的感觉了。

ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处:

- 第一,资源集中管理,实现资源的可配置和易管理。

- 第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。

也就是说,甲方要达成某种目的不需要直接依赖乙方,它只需要将想要达到的目的告诉第三方机构就可以了。比如甲方需要一双袜子,而乙方它卖一双袜子,它要把袜子卖出去,并不需要自己去直接找到一个买家来完成袜子的卖出。它也只需要找第三方,告诉别人我要卖一双袜子。这下好了,甲乙双方进行交易活动,都不需要自己直接去找卖家与买家,相当于程序内部开放接口,卖家由第三方作为参数传入。甲乙互相不依赖,而且只有在进行交易活动的时候,甲才和乙产生联系。反之亦然。这样做什么好处么呢,甲乙可以在对方不真实存在的情况下独立存在,而且保证不交易时候无联系,想交易的时候可以很容易的产生联系。甲乙交易活动不需要双方见面,避免了双方的互不信任造成交易失败的问题。因为交易由第三方来负责联系,而且甲乙都认为第三方可靠。那么交易就能很可靠很灵活的产生和进行了。这就是ioc的核心思想。在实际生活中常见的第三方支付平台和电子商务平台就是这样的道理。利用庞大的ioc容器,交易双方之外的第三方,提供可靠性可依赖可灵活变更交易方的资源管理中心。另外人事代理也是雇佣机构和个人之外的第三方。

在以上的描述中,为大家提炼了两个专业词汇:依赖注入和控制反转。所谓的依赖注入是甲方开放接口,在它需要的时候,能够将乙方传递进来(注入);所谓的控制反转,甲乙双方不相互依赖,交易活动的进行不依赖于甲乙任何一方,整个活动的进行由第三方负责管理。这就是spring IoC的思想所在。

原文地址:https://www.cnblogs.com/songanwei/p/9389109.html