实际上IOC就是工厂模式的进化,
即将创建对象跟使用对象分割。
如果说工厂模式还不能彻底解决耦合,因为客户端会和工厂类耦合,那 IOC 则进一步了,如果客户端和
被调用者都 IOC 容器内,则客户端就只和具体被调用者得接口耦合,OO中同步系统目前做到和接口耦合
就算是松耦合了(JMS等异步则完全解耦)。
比如我下一次要用到这次系统的几个类,如果在工厂模式下
则
object object=Factory.getObject("beanname");
而IOC下,
只需在配置文件中指定
<bean class="*.*.*.object"><property name="object">重用类</property></bean>
即可,
而object更可为一个接口,那么在不同的系统中,需要重用的类只需实现此接口就可以了。
从而实现dependency injection中所描述的,插件构造系统。
此谓之插件组合系统,是因为集成了很多个可以重用的类,从而使得这些重用的类成为“插件”,而当
前系统只需实现这些类的接口即可拔插组件。
依赖注射 :垃圾回收机制的镜像
Dependency Injection -- the mirror of Garbage Collection
作者使用垃圾回收机制做比喻,通过引入这个机制,解放了开发者,开发者不用再照顾垃圾回收这个问
题; IOC 则起到同样效果,开发者不用再关系对象之间依赖了,只管使用就可以了。
IOC容器就是预先将需要调用的类装入其中,就像个蒸笼,要拿包子的时候从里面拿就是了,不对,应该
是个自动送包子的蒸笼,我只要在我座位上标志我像吃包子了,这个蒸笼就自己把包子给我端上来了。
一个是抽象一个是实体,这么让抽象关联上实体?new。但是这样维护性降低了很多,所以将这个关系拿
到IOC容器中去,好办多了。
我的总结:
ioc的美德就是一个字:懒。
每个模块只关心自己那一点点功能。遇到须要别的功能的,什么是最简单的办法?
狮子大开口,定义一个接口,说:我要这个功能。
然后要求构造函数传递进来就行了。
有比这更省事的吗?为什么我们的程序员总是学不会懒惰呢?
多年的面向过程,面向实现的训练让他们遇事都是老老实实地想着直接去解决。从来没有想过有时候做
一件事情比不做一件事情糟糕得多!
ps:哈哈,ajoo说出了我很想说的一气话!!再翻翻martin的例子,插件?对了啊!就是少写点代码要更
多功能就张开嘴巴挂个牌子吧,我还要这个功能,给我吧。在深入下去,martin大师说的例子,本系统
实现一个接口,然后很多实现类,就像我挂牌子说我要吃包子,不管什么包子都可以,今天想吃韭菜的
,每天想吃肉的,反正只要实现包子接口的我都吃,只是偶尔跟心情有关系罢了。拿我朋友也想吃包子怎
么办?他也张开嘴巴挂个牌子说“我要吃包子。”嘛,朋友不喜欢吃韭菜跟肉的,而喜欢吃豆沙的怎么
办?那他自己叫人做些吧,反正只要学我的张开嘴巴挂个牌子就能吃了(只是苦了那个做包子的),只
要做好包子就够啦,想想也是,如果一方面要考虑包子怎么做,又要考虑是拿手掰开吃还是拿筷子夹着
吃,那可真累人,现在好啦,他只要重复我的绝大多数动作就够啦。
废话了一大堆,原来martin考虑得那么深啊,不仅把ajoo说的“懒”字当头说通了,而且还说了同一种
功能有X种实现的时候,我们应该做个统一接口以方便以后使用不同功能。
总之,对象在编码实现的时候,对象创建根本不需要我操作,直接拿来用就是了,就像小吃店蒸笼里的
包子,拿来就可以吃了,而不要重新做包子。使得一个个包子都成为插件。有了IOC,你难道不想多用几
次以前写过的代码吗?
总结那么久,IOC原理有2大好处。
1、功能更内聚(几乎都一块一块的了),使得重用性更高。
2、功能更具有多态性,比如只要实现一个接口只需injection进去就可以实现同样方法却调用不同资源
。
分享到:
相关推荐
### IoC (Inversion of Control) 深入理解 #### 一、IoC 基础 IoC,即控制反转,是一种设计思想,在软件工程领域被广泛应用于解决对象间依赖关系的问题。传统的编程模式中,对象创建自身依赖的对象并调用它们,而...
**正文** IoC,全称为Inversion of Control,即控制...了解并熟练掌握IoC有助于我们编写出高质量、低耦合的代码。在实际项目开发中,如Spring框架提供的IoC容器,可以帮助我们有效地管理对象的生命周期和依赖关系。
在IT行业中,依赖注入(IOC,Inversion of Control)是一种设计模式,它使得应用程序的组件之间解耦,提高了代码的可测试性和可维护性。在这个“自己实现ioc实例demo”中,我们将探讨如何通过XPath解析XML文件来实现...
今天,我们将详细解析 IoC 的优点和缺点。 优点 1. 简化对象的创建:IoC 容器可以自动地创建和管理对象,无需手动地创建和销毁对象,从而简化了编程的步骤。 2. 解耦合对象之间的依赖关系:IoC 容器可以将对象之间...
总之,Spring Ioc通过控制反转和依赖注入,极大地提高了代码的可维护性和可测试性,降低了系统的复杂度,使得开发人员能够更加专注于业务逻辑的实现。在实际开发中,理解并熟练运用Spring Ioc,对于提升开发效率和...
首先,我们来了解一下.IOC图标的组成部分。一个.IOC文件通常包含多个不同尺寸的图标,如@1x、@2x和@3x,分别对应iPhone的普通、高清和超高清屏幕。此外,它还可以包含浅色和深色模式的图标,以及选中和未选中的状态...
JavaEE Spring IoC(Inversion of Control,控制反转)是企业级应用开发的重要技术,它极大地简化了Java应用程序的构建和维护。Spring框架的核心特性就是IoC,它通过管理对象的生命周期和对象间的依赖关系,使得...
静态 IoC 的优点是实现简单、效率高,仅需要在客户端 XML 文件变更时,才实现类的生成、编译等工作,以后在运行期间直接调用 Class 文件即可,编译期已经实现依赖注入,具有编译期检查特点,占用较少的空间而赢得...
标题中的“雷赛IOC0640.rar”指的是雷赛智能公司的一款名为IOC0640的工业控制产品,该产品通常用于自动化控制系统中,提供高效、稳定的输入/输出(I/O)管理。这个压缩包可能包含了关于该产品的详细资料和技术文档。...
在提供的 "src" 压缩包文件中,如果包含的是 Spring 框架的源码,那么我们可以详细研究每个类和方法,了解 Spring 如何处理 Bean 的生命周期、解析配置、创建依赖关系等。这将帮助我们成为 Spring 框架的专家,更...
在本示例"iocdemo.rar"中,我们将探讨如何模仿Spring的IoC原理,通过XML配置和注解两种方式进行Bean的管理。 **控制反转(IoC)** IoC意味着应用程序的控制权由传统的程序流程控制转向了外部容器,即Spring框架。在...
自定义IOC容器虽然工作量较大,但能更好地理解和掌握IOC原理。 1. **依赖注入(Dependency Injection, DI)**:这是IOC的核心概念,DI允许我们通过构造函数、属性或方法将依赖注入到对象中,而不是让对象自己去创建...
通过学习和理解这些代码,你可以更深入地了解Spring框架如何通过注解实现IoC,以及如何在实际项目中应用这些概念。实践是掌握知识的关键,所以建议你仔细研究这个测试案例,以便更好地掌握Spring的注解驱动IoC机制。
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器处理,使得开发者可以更专注于业务逻辑的编写,而不是对象的生命周期管理。下面,我们将深入探讨Spring...
《Spring IOC:构建灵活的控制反转容器》 Spring框架的核心在于其Inversion of Control(IOC)容器,也称为依赖注入(Dependency Injection)。IOC是软件设计中的一个重要概念,它改变了传统程序设计中对象间的依赖...
在Java开发中,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理交给了外部容器,使得代码更加解耦和灵活。IoC的主要实现方式是依赖注入(Dependency Injection,DI)。在这个最新的IOC...
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
控制反转(IOC,Inversion of Control)是一种设计模式,它在软件工程中被广泛应用,特别是在Java开发中。IoC的核心思想是将对象的创建和管理权交给一个外部容器,而不是让对象自行创建和管理依赖。这有助于降低耦合...
我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring的IoC——从一个...