`

Spring控制反转的理解

 
阅读更多

请参看 http://www.doc88.com/p-671301065056.html

 

原文及讨论http://bbs.bccn.net/thread-82938-1-1.html 

 

Spring框架的核心就是控制反转(Inversion of Control)和依赖注入(Dependency 

Injection)通过这两方面来实现松耦合。 

 

    使用IoC对象是被动的接受依赖类而不是自己主动的去找。容器在实例化的时候主

动将它的依赖类注入给它。可以这样理解控制反转将类的主动权转移到接口上依赖注入

通过xml配置文件在类实例化时将其依赖类注入。通过下面的实例来逐步的理解 

 

 

    首先假设有一个需求类Business需要调用类Dependency的方法f()按照日常的做

法得到下面的代码 

//**类Dependency** 

public class Dependency { 

    public void f() {}; 

//**类Business** 

public  class Business { 

    Dependency d; 

    public Business() { 

    d = new Dependency(); 

    } 

    public void doSth() { 

        d.f(); 

    } 

 

对上述实现做出如下修改 

    首先将Business里的Dependency实例的获得该为setter方式其次将Dependency

类改为某个接口的实现。故可以得到下面新的代码 

//**接口IDependency** 

public interface IDependency { 

    void f(); 

//**类Dependency** 

public class Dependency { 

    public void f() {}; 

//**类Business** 

public  class Business { 

    IDependency d; 

    public Business() {} 

    public void doSth() { 

 d.f(); 

    } 

    public void setDependency(IDependency d) { 

        this.d = d; 

    } 

 

 

在新的代码中首先Business的变量d可以接收任何IDependency的实例另外

Dependency的实例不是通过Business来获得而是通过setter(也可以用构造器)来由外部

传给它。这似乎跟我们往常的代码没什么不同但这已经是一个良好的设计。关键就是

Dependency的实例如何从外部注入给Business呢 

这就要通过xml来实现了。 

 

    创建一个SpringFirst.xml进行简单的配置 

<beans> 

    <bean id = "dependency" class = "aopfirst.business.Dependency" /> 

    <bean 

        id = "business" 

        class = "aopfirst.business.Business" 

    > 

        <property name = "dependency"> 

            <ref bean = "dependency" /> 

        </property> 

    </bean> 

</beans> 

    这个配置文件里将Dependency类和Business类加入并将Dependency作为Business

的一个参数。 

 

单有了这个xml文件还不够还需要一个测试类来加载该xml文件spring提供了现成

的API在加载上面的xml的时候就进行了如下工作实例化Dependency类实例化Business

类并将Dependency的实例作为参数赋给了Business实例的 

setDependency()方法。下面是该测试程序 

 

 

public class StartServer { 

    public static void main(String [] args) { 

     ClassPathResource cr = new ClassPathResource("SpringFirst.xml"); 

     BeanFactory factory = new XmlBeanFactory(cr); 

     Business b = (Business)factory.getBean("business"); 

     b.doSth(); 

    } 

 

上面的程序加载了xml以后获得id为"business"的bean即Business类的实例并

调用了其doSth()方法。由此可见Business的依赖类Dependency是通过xml来注入的而

且Business是通过接口IDependency来接收Dependency实例。因此当我们又有新的

IDependency的实现时只需要修改xml文件即可测试程序只需要根据xml里的id值来获

得需要的参数。 

 

    总结上面的例子对控制反转和依赖注入已经能理解了。依赖类(Dependency)是通过外

部(xml)来注入的而不是由使用它的类(Business)来自己制造这就是依赖的注入。另一方

面Business对类Dependency的依赖转移到对接口IDependency的依赖控制权由类转移

到了接口即由"实现"转移到"抽象"中。这就是控制反转。 

 

分享到:
评论

相关推荐

    spring 控制反转和依赖注入.docx

    spring 控制反转和依赖注入进行基础知识的生命周期、延迟初始化、装配方式等进行案例总结使用。从而对spring基础知识更加理解。

    spring控制反转的理解

    spring很好的例子,相当容易理解,保证几分钟理解spring

    Spring控制反转(IoC)的理解

    NULL 博文链接:https://hgxs-org.iteye.com/blog/1469237

    Spring——IOC(控制反转)与DI(依赖注入).docx

    IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法 。... 在Spring中实现控制反转的是IOC容器 ,其 实现方法是依赖注入 (Dependency Injection,DI)

    Spring_01_入门篇_依赖注入(控制反转)_ANN

    此文档仅供初学者学习,包括Spring的依赖注入(控制反转)的详细实例。以三层贯穿实例(持久层、业务层、控制层),由MAIN方法直接调用测试用例。

    理解Spring中的依赖注入和控制反转

    主要介绍了理解Spring中的依赖注入和控制反转,具有一定参考价值,需要的朋友可以了解下。

    spring1.1开发理解

    Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! 控制权:对象的创建和调用关系的控制. (3)DI概念 Dependecy Injection 依赖注入 Spring 使用DI技术实现了IoC控制。 a.setter注入...

    Spring框架文档 - 核心技术部分 中英双语版 第二部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    Spring框架文档 - 核心技术部分 中文版 - 第一部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    Spring攻略PDF版

     第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 解决方案   1.1.3 实现方法   1.2 使用服务定位器降低查找组件的复杂性   1.2.1 问题描述   1.2.2 解决方案...

    Spring框架文档 - 核心技术部分 中文版 - 第二部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    Spring攻略中文版PDF

     第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 解决方案   1.1.3 实现方法   1.2 使用服务定位器降低查找组件的复杂性   1.2.1 问题描述   1.2.2 解决方案...

    Spring框架文档 - 核心技术部分 中英双语版 第一部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    IOC控制反转学习文档

    Spring框架学习中的核心,控制反转IOC,理解Spring框架主要注入所依赖的资源,解耦开发

    Spring试题和答案.pdf

    )控制反转 )对象被动的接受依赖类 )对象主动的去找依赖类 )一定要用接口 )下面关于AOP的理解,正确的是(B C)(选择两项) )面向纵向的开发 )面向横向的开发 )AOP关注是面 )AOP关注的是点

    Spring攻略英文版(附带源码)

     第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 解决方案   1.1.3 实现方法   1.2 使用服务定位器降低查找组件的复杂性   1.2.1 问题描述   1.2.2 解决方案   ...

    Spring自学笔记-Ioc(控制反转)容器

    在自学Spring Framework 开发参考手册2.5时做的学习笔记,其中在遇到手册上不能理解的地方的时候,在网上找了一些比较好的文档也放在了里面。

    java-spring教程-全面理解

    1、介绍了spring的概念 2、介绍了spring的控制反转IOC 3、介绍了spring的面向切面的编程AOP概念以及应用 4、介绍了spring的模板Template 5、spring与Struts的集成

    spring ioc aop基础理论实践笔记

    1,spring是一个开源的免费的框架(容器)。 2,spring是一个轻量级的,非入侵式的框架。 ​ 非入侵式:就是项目引入了这个框架之后,...总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。

    第一个Spring程序(DI的实现).docx

    在spring框架中对象实例改由spring框架创建,spring容器负责控制程序之间的关系,这就是spring的控制反转。在spring容器的角度看来,spring容器负责将被依赖对象赋值给成员变量,这相当于为实例对象注入了它所依赖的...

Global site tag (gtag.js) - Google Analytics