IOC(DI):
java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用他的合作对象时,自己均要使用像new object() 这样的语法来完成合作对象的申请工作。
你会发现:对象间的耦合度高了。而IOC的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关系业务逻辑本身就可以了。从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC、DI)。
DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?就是:获得依赖对象的方式反转了。
IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。
举个简单的例子:
找女朋友: 1.先到处看到好看的妹子
2.接近她,打听她喜好,问qq,微信
3.想办法认识她,投其所好
4.嘿嘿嘿(懂得自然懂)
过程是复杂的,我们需要设计每个细节按这个流程执行,传统开发就是这样,在一个对象中,如果要使用另外的对象,就必须得到它(new),使用完还要销毁,对象始终会和其他的接口或类藕合起来。
那么IoC是如何做的呢?
1.ioc代表一家婚介所,婚介所保存很多单身男女信息。
2.我想婚介所提要求,告诉它你要找的的女生类型,然后配对。
3.如果婚介所提供的女生类型不合要求,抛异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。
Spring会把所有的类都会在spring容器中登记(bean),告诉spring你是个什么东西,你需要什么东西,然后spring会在系统
运行到适当的时候(success),把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来
控制,也就是说控制对象生存周期是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,
所以这叫控制反转。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依
赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我
们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,
spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依
赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?
Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,
spring就是通过反射来实现注入的。关于反射的相关资料请查阅java doc。
本站博客:www.wurao.xin