IoC/DI基本思想的演变

----------------------------------------------------------------------------------

(1)IoC/DI的概念

 IoC --- Inversion of Control,控制反转

  在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在类的内部控制。IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。

 DI -- Dependency Injection(依赖注入)
  即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中去。
  依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而不需任何代码就可以指定目标需要的资源,完成自身的业务逻辑,而不用关心具体的资源来自何处,由谁实现。

(2)IoC/DI基本思想的演变

  第一个阶段:(Java基本阶段)

    有一个接口A和两个实现类A1、A1.

    

  如果类B想要使用类A1或者类A2的话,基本的写法如下:

 1   public class B{
 2
 3     public void test(){
 4
 5       A a = new A1();
 6
 7       a.method1();
 8
 9     }
10   }

  上面的代码中,对于B类来说是主动实例化对象,直接获取依赖,这种实现方式的缺点: 更换实现类需要重新编译源代码、耦合了实例生产者和实例消费者。

  第二个阶段:(Factory+XML)

  

  在第二个阶段中使用了工厂模式--Factory,在B类中需要使用接口A,直接去工厂里面获取:

    A a = Factory.createA();

  然后拿到a的实现后就可以调用接口的方法,这样对于B类来说是被动实例化对象,间接获取依赖,但是对于工厂类来说就是主动的,这种实现方式的缺点: 更换实现同样需要重新编译源代码。

  第三个阶段:(Factory+XML+反射)

  这个阶段是使用工厂模式+配置文件+反射,在B类里面需要使用接口A,应用工厂模式去获取:A a = Factory.createA(),然后通过a来调用接口方法。

  在工厂类里使用配置文件来决定要实例化的具体类,对于B类来说是被动创建对象,间接获取依赖;对于工厂来说也是被动创建对象.这种实现方式的缺点: 如何实例化带参数的类、如何在调用方法时传递值。

  第四个阶段:(IoC/DI)  

  

  这个阶段是IoC/DI阶段了,出现了IoC/DI容器,此时每个类想要获取什么外部资源 都可以直接去找IoC/DI容器,由IoC/DI容器来提供。

  此时由容器来创建对象和装配对象,并管理对象生命周期,对于应用程序而言,就是被动实例化被动接受依赖了。 

(3)IoC/DI的基本思想

  a.把程序之间的依赖关系去掉

  b.把程序对象设置到IoC/DI容器的配置中,作为Bean

  c.由IoC/DI容器来管理Bean的创建、实例化

  d.由IoC/DI容器来把Bean之间的关系注入到需要这些关系的对象里面

  简而言之:就是对象之间的依赖关系全部去掉,然后由IoC/DI容器来管理对象和对象之间的依赖关系。这样的好处:实现了对象之间的松散耦合

时间: 2024-10-13 18:12:36

IoC/DI基本思想的演变的相关文章

Spring -- IOC/DI 基础概念的理解

Spring -- IOC/DI 基础概念 思维导图: ------------------------------------------------------- IoC/DI 的基本概念 IoC是什么 ? IoC -- Inversion of control, 控制反转   在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则. 理解IoC的关键是明

工厂方法模式与IoC/DI控制反转和依赖注入

IoC——Inversion of Control  控制反转 DI——Dependency Injection   依赖注入 要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)? 依赖注入和控制反转是同一概念吗? 下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了.(1)参与者都有谁: 一般有三方参与者,一个是某个对象:一个

工厂方法模式与IoC/DI

IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 1:如何理解IoC/DI 要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)? 依赖注入和控制反转是同一概念吗? 下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了.(1)参与者都有谁: 一般有三方参与者,

spring IOC/DI容器的理解

参与者:应用程序和spring正向:现在的程序方向,A对象要使用B对象,现在是A里面直接创建B的实例,然后调用.publc class A{ void t1(){ new B().t2();  }}public class B{void t2(); 简而言之,就是程序需要什么.就由程序主动去获取需要的资源,这个方向就是正向.容器是用来创建和装配对象,并管理对象生命周期的.对于应用程序而言,就是被动实例化和被动接受依赖了.装配:在spring容器内拼凑bean叫作装配.装配bean的时候,你是在告

设计模式-IoC/DI

转(http://www.cnblogs.com/sjms/archive/2010/06/19/1760692.html) IoC--Inversion of Control  控制反转  DI--Dependency Injection   依赖注入 1:如何理解IoC/DI         要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?

深入理解IoC/DI

------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁? 控制什么? 为何叫反转(对应于正向)?哪些方面反转了?为何需要反转? 谁控制谁?  --> IoC/DI容器控制应用程序 控制什么? --> IoC/DI容器控制对象本身的创建.实例化; IoC/DI容器控制对象之间的依赖关系 为何叫反转(对应于正向)? --> 因为现在应用程序不能主动

关于依赖注入IOC/DI的感想

之前一直不明白依赖注入有什么好处,甚至觉得它是鸡肋,现在想想,当时真是可笑. 这个想法正如同说接口是没有用处一样. 当整个项目非常庞大,各个方法之间的调用非常复杂,那么,可以想象一下,假设说没有任何的分离模块的想法,各个关系非常的复杂,不便于维护以及查找bug等等.这个时候,就需要一个东西,去将这么多复杂的玩意分离开来,很喜欢的一句话:高内聚,低耦合. 举个栗子,现在一个很简单的功能,可能只需要通过一些方法互相调用就可以实现,OK,那么随着需求的增多,现在添加了几个功能,那么,我们把相同的东西划

对DIP IoC DI的理解与运用

DIP,IoC,DI基本概念 依赖倒置原则(DIP,Dependency Inverse Principle):强调系统的“高层组件”不应当依赖于“底层 组件”,并且不论是“高层组件”还是“底层组件”都应当依赖于抽象.抽象不应当依赖于实现,实现应当依赖于抽象. 依赖(Dependency):组件A如果:①持有B的引用,②调用B的方法,③创建(new)B,则A对B产生依赖. 控制(Control):A依赖B,则B拥有“控制权”,因为B的某种变化可能会引起A的变化. 控制反转(IoC,Inverse

spring--学习之IOC DI

2.1.1  IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了",那我们来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动