浅谈IOC-说清楚IOC是什么
ioc指标

ioc指标IOC指标,即“身体控制率”(Index of Control),可以用来衡量运动员在比赛中控制自己身体的能力。
简单来说,这个指标描述了运动员在进行各种动作时,身体的运动方式和跟随度。
IOC指标是评判体育比赛中技术和控制能力的主要指标之一,被广泛应用于许多竞技项目中。
首先,跳水是一项需要极高IOC指标的运动项目。
跳水运动员需要控制身体在空中的位置和姿态,使身体与水面的接触达到最佳状态。
跳水的每个动作都需要极高的身体控制率,通过一系列的认真准备和科学训练,才能使运动员的IOC指标达到最高水平。
在大赛舞台上,击败对手需要的不仅仅是技术的高超,更需要的是足够的IOC指标。
其次,单板滑雪也是需要高提交控制率的运动项目之一。
在高速度下滑和转弯上坡等动作中,运动员需要掌控自己的动作,以保持稳定和速度。
因此,单板滑雪运动员需要在训练中注重强化身体的控制能力,在比赛中实现身体和器材的完美配合。
只有运动员的IOC指标达到了非常高的水平,才能在单板滑雪赛场上获得最好的效果。
再者,艺术体操也是高IOC指标的运动项目之一。
此类运动项目中需要进行许多高难度的动作,例如后空翻、金字塔等,这些动作需要非常高的身体控制能力。
艺术体操运动员需要通过长时间的锻炼和苦练,逐渐提升自己的IOC指标,使自己能够完成复杂的身体动作和连续的动作组合。
在比赛中,拿下最高分数的方法不仅是技术高超,还需要充分表现出自己的控制和统一性,使裁判欣赏。
总之,IOC指标是衡量运动员控制自己身体的能力的重要指标,各运动项目也需要不同的级别的IOC指标,运动员需要在训练中注重提高IOC指标,以更好地在比赛中取得优异成绩。
虽然高IOC指标的达成并不容易,但在良好的体育知识和科学训练的基础上,运动员的IOC 指标定能达到很高水准,为他们赢得荣誉和胜利。
ioc的基本概念 -回复

ioc的基本概念-回复IOC的基本概念是什么?IOC,即Inversion of Control,中文为“控制反转”,是软件设计中的一种编程思想和设计原则。
它的核心思想是将程序中对象之间的关系的控制权由程序员转移到框架或容器中,以提高程序的可扩展性和重用性。
1. 控制反转的定义与起源控制反转(IOC)起源于面向对象编程中的依赖倒置原则(Dependency Inversion Principle,DIP)。
依赖倒置原则认为,高层模块不应该依赖于低层模块,而是二者都应该依赖于抽象。
它的目的是为了减少类与类之间的耦合程度,提高系统灵活性和可维护性。
控制反转是依赖倒置原则的具体实现方式之一,通过将对象的依赖关系的控制权从调用者中转移到容器或框架中。
2. 控制反转的作用和优势控制反转的作用是将对象的创建、依赖注入和生命周期等管理工作交由容器或框架来完成,从而减轻了程序员的负担。
它的优势主要体现在以下几个方面:(1)解耦:控制反转通过减少模块之间的直接依赖关系,使得系统的各个模块可以独立开发、测试和维护,提高系统的可维护性和可扩展性。
(2)灵活性:控制反转使得系统更易于修改和替换组件,使得应用程序更加灵活。
通过修改容器配置,可以改变对象之间的关系和行为,而不需要修改源代码。
(3)可扩展性:控制反转使得系统更易于扩展。
新的模块可以通过依赖注入的方式加入系统,而不需要改变现有的代码。
3. 控制反转的实现方式控制反转的实现方式有多种,常见的包括:依赖注入(Dependency Injection,DI)、服务定位(Service Locator)和模板方法(Template Method)等。
(1)依赖注入(DI)是控制反转最常用的实现方式之一。
它通过将对象的依赖关系在容器中进行配置,然后由容器负责创建和注入对象的依赖关系。
依赖注入主要有三种方式:构造函数注入、属性注入和接口注入。
构造函数注入是通过对象的构造函数传入所依赖的其他对象来实现依赖注入。
ioc失陷特征

ioc失陷特征IOC失陷特征随着信息技术的快速发展,网络攻击已成为一种常见的威胁。
在这个数字时代,网络安全已经成为了企业、组织和个人必须关注的重要问题。
在这种情况下,如何及时发现和防范网络攻击已成为一个迫切需要解决的问题。
因此,本文将介绍IOC失陷特征。
一、什么是IOCIOC(Indicator of Compromise)是指可能表明系统或网络遭受攻击或数据泄露的指标。
它可以是一组软件或硬件配置文件、日志文件、注册表项和其他系统元素,用于识别特定类型的恶意活动。
二、常见的IOC失陷特征1.异常流量异常流量是指与正常流量不同的流量模式。
这种异常流量通常是由于恶意软件或黑客攻击造成的,例如DDoS攻击等。
2.异常登录异常登录通常是指在未授权的时间或地点登录系统。
例如,在凌晨3点登录公司内部服务器就属于异常登录。
3.恶意文件恶意文件通常包括病毒、木马、间谍软件等,在用户不知情的情况下安装在计算机上,并进行各种恶意活动。
4.异常进程异常进程通常是指在系统中发现未知进程。
这种情况可能是由于恶意软件或黑客攻击造成的。
5.异常端口异常端口是指未知的开放端口,这些端口可能被黑客或恶意软件用于攻击和控制目标系统。
6.异常注册表项异常注册表项通常是指未知的、不在预期列表中的注册表项。
这些注册表项可能被恶意软件用于隐藏其存在或实现其他恶意活动。
7.异常服务异常服务通常是指未知的、不在预期列表中的服务。
这些服务可能被黑客或恶意软件用于攻击和控制目标系统。
三、如何发现IOC失陷特征1.网络监控网络监控可以帮助管理员及时发现网络攻击行为,例如流量分析、事件日志等。
2.漏洞扫描漏洞扫描可以检测系统中存在的漏洞,并及时修复,防止黑客利用漏洞进行攻击。
3.安全审计安全审计可以记录系统中所有操作,并对可疑行为进行报警和记录,例如登录尝试失败等。
4.文件检测文件检测可以检查已安装程序和文件是否包含病毒和木马等恶意软件。
5.端口扫描端口扫描可以检测系统中开放的端口,及时发现异常端口并关闭。
ioc的实现方式

ioc的实现方式
IOC(InversionofControl)指的是控制反转,它是一种设计模式,用于解耦应用程序的各个组件。
在传统的编程模式下,应用程序的组件之间相互依赖,而在IOC模式下,则通过将组件之间的依赖关系反转,使得组件之间的耦合度降低,从而提高了应用程序的灵活性和可重用性。
实现IOC的方式有很多种,其中比较流行的方式包括:
1. 依赖注入(DI):它是实现IOC的一种方式,它通过将一个组件所依赖的其他组件的引用传递给它,从而实现了组件之间的解耦。
依赖注入有三种实现方式,分别为构造函数注入、属性注入和接口注入。
2. 控制反转容器(IOC Container):它是一种管理应用程序组
件的容器,它负责创建、管理和销毁组件的实例。
IOC容器通过读取配置文件或使用编程方式进行配置,从而实现对应用程序组件的管理。
3. 服务定位器(Service Locator):它是一种比较简单的IOC
实现方式,它通过提供一个服务定位器接口,让应用程序组件可以通过服务定位器来获取它所需要的其他组件的引用。
服务定位器通过缓存组件的实例,从而提高应用程序的性能。
综上所述,IOC是一种重要的设计模式,它可以提高应用程序的灵活性和可重用性。
在实现IOC的过程中,可以选择依赖注入、控制反转容器或者服务定位器等方式,选择合适的方式可以提高应用程序的可维护性和扩展性。
ioc底层原理实现步骤

ioc底层原理实现步骤IOC(Inversion of Control)即控制反转,是一种设计模式,它的底层原理可以通过以下步骤来实现:1. 创建容器:首先,需要创建一个容器,用于管理和控制对象的创建和生命周期。
容器可以是一个独立的框架,如Spring框架中的ApplicationContext,或者是自己手动实现的一个简单容器。
2. 配置对象:在容器中,需要配置需要被管理的对象。
配置可以通过XML文件、注解或者编码方式进行。
配置包括对象的名称、类型、依赖关系等信息。
3. 对象的创建:当容器启动时,会根据配置信息创建被管理的对象。
通过反射机制,容器可以动态地实例化对象,并调用构造函数进行初始化。
4. 依赖注入:在对象创建完成后,容器会自动为对象注入其所依赖的其他对象。
依赖注入可以通过构造函数、setter方法或者字段注入的方式进行。
通过依赖注入,对象之间的关系由容器来维护,而不是由对象自己来创建和管理。
5. 生命周期管理:容器可以管理对象的生命周期,包括对象的创建、初始化、销毁等过程。
通过配置,可以指定对象的初始化方法和销毁方法,并由容器在适当的时机调用。
6. 对象的获取:在容器中,可以通过对象的名称或者类型来获取对象的实例。
容器会根据配置信息,从容器中查找相应的对象,并返回给调用者使用。
7. AOP(Aspect-Oriented Programming)支持:一些容器框架还支持AOP的功能,可以通过配置的方式为对象添加横切关注点。
通过AOP,可以将一些通用的功能,如日志、事务管理等,从业务逻辑中分离出来,提高代码的复用性和可维护性。
8. 容器的管理:容器可以管理多个对象,可以根据需要创建、获取、销毁对象,并提供一些管理和监控的功能,如对象池、缓存、性能统计等。
通过以上步骤,IOC底层原理可以实现对象的创建、依赖注入、生命周期管理和AOP支持等功能。
通过将对象的创建和依赖关系的管理交给容器来完成,可以有效地降低代码的耦合度,提高代码的灵活性和可维护性。
Ioc

第二、USB设备和电脑主机的之间无关性,还带来了另 外一个好处,生产USB设备的厂商和生产电脑主机的厂 商完全可以是互不相干的人,各干各事,他们之间唯一 需要遵守的就是USB接口标准。这种特性体现在软件开 发过程中,好处可是太大了。每个开发团队的成员都只 需要关心实现自身的业务逻辑,完全不用去关心其它的 人工作进展,因为你的任务跟别人没有任何关系,你的 任务可以单独测试,你的任务也不用依赖于别人的组 件,再也不用扯不清责任了。所以,在一个大中型项目 中,团队成员分工明确、责任明晰,很容易将一个大的 任务划分为细小的任务,开发效率和个例子,依赖注入的思路已经非常清楚:当电脑主机读 取文件的时候,我就把它所要依赖的外部设备,帮他挂接 上。整个外部设备注入的过程和一个被依赖的对象在系统运 行时被注入另外一个对象内部的过程完全一样。
我们把依赖注入应用到软件系统中,再来描述一下这个 过程: 对象A依赖于对象B,当对象 A需要用到对象B 的时候,IOC容器就会立即创建一个对象B送给对象A。 IOC容器就是一个对象制造工厂,你需要什么,它会给你 送去,你直接使用就行了,而再也不用去关心你所用的 东西是如何制成的,也不用关心最后是怎么被销毁的, 这一切全部由IOC容器包办。 在传统的实现中,由程 序内部代码来控制组件之间的关系。我们经常使用new 关键字来实现两个组件之间关系的组合,这种实现方式 会造成组件之间耦合。IOC很好地解决了该问题,它将实 现组件间关系从程序内部提到外部容器,也就是说由容 器在运行期将组件间的某种依赖关系动态注入组件中。
4 IOC为我们带来了什么好处
我们还是从USB的例子说起,使用USB外部设备比使 用内置硬盘,到底带来什么好处? 第一、USB设备 作为电脑主机的外部设备,在插入主机之前,与电脑主 机没有任何的关系,只有被我们连接在一起之后,两者 才发生联系,具有相关性。所以,无论两者中的任何一 方出现什么的问题,都不会影响另一方的运行。这种特 性体现在软件工程中,就是可维护性比较好,非常便于 进行单元测试,便于调试程序和诊断故障。代码中的每 一个Class都可以单独测试,彼此之间互不影响,只要 保证自身的功能无误即可,这就是组件之间低耦合或者 无耦合带来的好处。
ioc框架概念
IoC框架概念详解1. 概念定义IoC(Inversion of Control,控制反转)是一种设计原则,也是一种软件开发模式。
它用于解耦组件之间的依赖关系,将组件的创建、组装和管理的控制权从应用程序代码中转移到一个容器或框架中。
在传统的编程模式中,应用程序代码通常负责创建和管理对象的生命周期,即控制对象的创建、依赖关系的维护、对象之间的协作等。
而在IoC模式中,这些职责都由框架或容器来承担,应用程序代码只需通过配置或注解的方式来描述对象的依赖关系,然后由框架或容器来完成对象的创建、依赖注入和生命周期管理。
IoC模式的核心思想是将应用程序代码与框架或容器解耦,通过配置或注解的方式来描述对象的依赖关系,从而实现对象之间的松耦合。
2. 重要性2.1 解耦IoC模式通过将对象的创建、组装和管理的控制权交给框架或容器,实现了对象之间的解耦。
应用程序代码只需描述对象之间的依赖关系,而不需要关心对象的创建和管理细节。
这样可以提高代码的可维护性和可测试性,减少代码的耦合度。
2.2 可扩展性由于IoC模式将对象的创建和管理交给框架或容器,应用程序代码只需描述对象之间的依赖关系,因此可以方便地替换、增加或删除对象,而不需要修改应用程序代码。
这样可以提高代码的可扩展性,使系统更易于维护和升级。
2.3 可重用性IoC模式将对象的创建和管理集中在框架或容器中,使得这些对象可以在不同的应用程序中重复使用。
通过简单地修改配置或注解,可以将对象应用到不同的场景中,提高代码的可重用性。
2.4 控制权转移IoC模式将对象的创建和管理的控制权从应用程序代码中转移到框架或容器中,使得应用程序代码专注于业务逻辑的实现,而不需要关心对象的创建和管理。
这样可以提高代码的可读性和可维护性,使代码更加清晰和易于理解。
3. 应用3.1 Spring框架Spring框架是一个开源的JavaEE应用程序框架,广泛应用于企业级应用程序的开发。
它基于IoC模式,通过配置文件或注解的方式描述对象之间的依赖关系,实现了对象的创建、依赖注入和生命周期管理。
ioc的原理
ioc的原理Ioc的原理。
控制反转(Inversion of Control,简称IoC)是一种软件设计思想,它将程序的控制权从程序内部转移到外部容器,实现了程序的松耦合和可扩展性。
IoC的原理是通过依赖注入和依赖查找来实现的,下面将详细介绍IoC的原理及其应用。
首先,依赖注入是IoC的核心概念之一。
它通过将对象的依赖关系由程序内部转移到外部容器来实现松耦合。
在传统的程序设计中,对象之间的依赖关系是在对象内部通过new关键字或工厂方法来创建的,这样会导致对象之间的耦合度较高,难以进行单元测试和替换。
而通过依赖注入,我们可以将对象的依赖关系交由外部容器来管理,从而实现了对象之间的解耦合。
其次,依赖查找也是IoC的重要概念之一。
它通过外部容器来查找和装配对象之间的依赖关系,从而实现了程序的可扩展性。
在传统的程序设计中,对象之间的依赖关系是在程序内部硬编码的,一旦需要替换或扩展某个对象,就需要修改程序内部的代码。
而通过依赖查找,我们可以将对象之间的依赖关系交由外部容器来管理,从而实现了程序的可扩展性。
最后,IoC的原理在实际应用中有着广泛的应用。
比如在Spring框架中,通过IoC容器来管理对象之间的依赖关系,实现了程序的松耦合和可扩展性。
在Hibernate框架中,通过IoC容器来管理对象之间的依赖关系,实现了对象的持久化和数据库的交互。
在Android开发中,通过IoC容器来管理Activity和Fragment之间的依赖关系,实现了页面的解耦合和可扩展性。
总之,IoC的原理是通过依赖注入和依赖查找来实现程序的松耦合和可扩展性。
它在实际应用中有着广泛的应用,可以帮助我们提高程序的可维护性和可扩展性。
希望本文对IoC的原理有所帮助,谢谢阅读!。
ioc的实现原理
ioc的实现原理一、什么是IOCIoC(Inversion of Control),控制反转,是一种设计思想,也是面向对象编程中的一种设计模式,总的来说就是把曾经在程序中由调用者所有的控制权反转给被调用者。
也就是说,原本在调用者中手动创建被调用者的对象实例,然后手动调用他们的方法等等,交由IOC容器来负责对象的实例化、维护、调用等等过程,调用者只需要把条件告诉IOC容器,而不用关心如何创建、维护和调用,这样就实现了调用者和被调用者的松耦合。
二、IOC实现原理IoC的实现原理主要有两种,一种是依赖注入(Dependency Injection),另一种是依赖查找(Dependency Lookup)。
下面就依次介绍这两种实现原理。
1、依赖注入(Dependency Injection)依赖注入(Dependency Injection)是IOC的最基本的实现原理,它的基本思想是把实例化对象的过程交给IoC容器来完成,然后交由IoC容器来进行管理。
依赖注入的基本步骤:(1)描述需要的依赖,包括属性、构造函数等。
(2)实例化对象,将实例化的对象放到IoC容器中。
(3)给对象的依赖属性赋值,将配置文件中的值赋给对象的依赖属性。
(4)给容器中的对象实现依赖解析,查找对象所依赖的对象实例,并注入。
2、依赖查找(Dependency Lookup)依赖查找(Dependency Lookup)是另一种常用的IoC实现原理,它的基本思想是调用者只用查找容器中的对象实例,然后直接使用,不需要交给容器进行管理。
依赖查找的基本步骤:(1)首先把对象实例定义好,然后把实例放到容器中,这样调用者就可以从容器中获得已经定义好的对象实例。
(2)给容器中的对象实例定义依赖,将配置文件中的值赋给容器中的对象实例的属性。
(3)调用者从容器中查找想要的对象实例,并直接使用,这样就实现了IoC的实现原理。
三、总结IoC是一种设计思想,实现的关键是让容器控制被调用者的生命周期,而调用者只负责把作为参数传递给容器,容器才完成需要的全部步骤。
ioc的概念 -回复
ioc的概念-回复什么是IOC概念?IOC,即Inversion of Control(控制反转),是一种软件设计思想,用于解决软件系统中各组件之间的依赖关系。
在传统的软件设计中,组件之间的依赖关系通常由高层组件控制和管理,即高层组件通过直接调用低层组件来满足其需要。
而在IOC中,控制权反转,低层组件成为了高层组件的控制者,高层组件不再直接调用低层组件,而是通过IOC容器来获取所需的依赖对象。
通过IOC的应用,降低了组件之间的耦合度,提高了系统的可维护性和可扩展性。
IOC的背景和起源在传统的软件设计模式中,大部分系统都是基于面向对象的编程语言实现的。
这种面向对象的设计模式中,组件之间的依赖关系通常是通过实例化对象来实现的。
这种实例化对象的行为使得各组件之间的耦合度很高,当一个组件发生变化时,相关联的其他组件也可能需要修改。
这种高耦合度的设计模式使得系统的维护和扩展变得非常困难。
为了解决这个问题,软件开发者开始思考如何将依赖关系从组件中解脱出来,使得各组件之间的耦合度降到最低。
于是,IOC的概念应运而生。
IOC的基本原则和机制在IOC中,依赖关系的控制权被反转了。
传统的依赖关系需要由高层组件主动获取所需的依赖对象,而在IOC中,这种获取的主动权被交给了IOC 容器,并由IOC容器主动注入所需的依赖对象。
例如,假设有一个订单管理系统,其中包含订单服务和邮件服务两个组件。
在传统的设计中,订单服务需要主动实例化一个邮件服务对象来发送邮件。
而在IOC中,订单服务只需要声明对邮件服务的依赖,并由IOC容器负责注入所需的邮件服务对象。
这种注入的方式通常分为两种:构造函数注入和属性注入。
构造函数注入是将依赖对象作为构造函数的参数传入,从而创建一个包含依赖对象的组件实例。
属性注入是通过IOC容器在创建组件实例后,将依赖对象通过属性的方式注入到组件中。
IOC容器的实现方式主要有三种:依赖查找、依赖注入和自动装配。
依赖查找是通过在IOC容器中查找依赖对象来获取所需的依赖;依赖注入是将依赖对象主动注入到组件中;自动装配是根据IOC容器中的配置自动将依赖对象注入到组件中,无需显式地声明和获取依赖对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈IOC--说清楚IOC是什么 1.IOC的理论背景 我们知道在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑。
图1 软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 图2 对象之间的依赖关系 耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson 1996年提出了IOC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中。 2.什么是IOC IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。 1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。 IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。如下图: 图3 IOC解耦过程 大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。 我们再来做个试验:把上图中间的IOC容器拿掉,然后再来看看这套系统:
图4 拿掉IOC容器后的系统 我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言,这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了,跟别人没有任何关系! 我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下: 软件系统在没有引入IOC容器之前,如图1所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。 软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。 通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。 3.IOC也叫依赖注入(DI) 2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。 学过IOC的人可能都看过Martin Fowler的这篇文章:Inversion of Control Containers and the Dependency Injection pattern。 博客园的园友EagleFish(邢瑜琨)的文章: 深度理解依赖注入(Dependence Injection)对Martin那篇经典文章进行了解读。 CSDN黄忠成的Inside ObjectBuilder也是,不过他应该来自台湾省,用的是繁体,看不管繁体中文的,可以看园中的吕震宇博友的简体中文版Object Builder Application Block 。 4.IOC的优缺点 In my experience, IoC using the Spring container brought the following advantages: flexibility o changing the implementation class for a widely used interface is simpler (e.g. replace a mock web service by the production instance) o changing the retrieval strategy for a given class is simpler (e.g. moving a service from the classpath to the JNDI tree) o adding interceptors is easy and done in a single place (e.g. adding a caching interceptor to a JDBC-based DAO) readability o the project has one unified and consistent component model and is not littered with factories (e.g. DAO factories) o the code is briefer and is not littered without dependency lookup code (e.g. calls to JNDI InitialContext) testability o dependencies are easy to replace mocks when they're exposed through a constructor or setter o easier testing leads to more testing o more testing leads to better code quality, lower coupling, higher cohesion 使用IOC框架产品能够给我们的开发过程带来很大的好处,但是也要充分认识引入IOC框架的缺点,做到心中有数,杜绝滥用框架。 第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。 第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。 第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。 第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。 我们大体可以得出这样的结论:一些工作量不大的项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员的知识能力欠缺,对于IOC框架产品缺乏深入的理解,也不要贸然引入。最后,特别强调运行效率的项目或者产品,也不太适合引入IOC框架产品,像WEB2.0网站就是这种情况。 5.IOC容器的技术剖析 IOC中最基本的技术就是“反射(Reflection)”编程,目前.Net C#、Java和PHP5等语言均支持,其中PHP5的技术书籍中,有时候也被翻译成“映射”。有关反射的概念和用法,大家应该都很清楚,通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象。这种编程方式可以让对象在生成时才决定到底是哪一种对象。反射的应用是很广泛的,很多的成熟的框架,比如象Java中的Hibernate、Spring框架,.Net中 NHibernate、Spring.Net框架都是把“反射”做为最基本的