`

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 控制反转的模拟程序

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性是依赖注入(Dependency Injection,简称DI),也常被称为控制反转(Inversion of Control,简称IoC)。控制反转是一种设计模式,它改变了传统应用程序...

    Spring 控制反转 依赖注入

    **Spring 框架中的控制反转 (IoC) 和依赖注入 (DI)** 在软件开发中,控制反转(Inversion of Control,简称IoC)是一种设计原则,它将对象的创建和管理权从代码中剥离出来,转交给一个外部容器(如Spring框架)。...

    Spring控制反转(IoC)的理解

    **Spring控制反转(IoC)理解** Spring框架的核心特性之一是控制反转(Inversion of Control,简称IoC),也常被称为依赖注入(Dependency Injection,简称DI)。IoC是一种设计模式,它将对象的创建和管理从应用代码...

    Spring IOC 控制反转

    接下来,我们通过一个简单的示例代码来进一步理解Spring IOC控制反转的实现过程: ```java // 定义一个DAO层接口 public interface UserDao { void save(); } // DAO层接口的实现类 public class UserDaoImpl ...

    helloIoc.zip spring ioc控制反转简单测试代码

    Spring框架的核心特性之一就是依赖注入(Dependency Injection,简称DI),它通过控制反转(Inversion of Control,简称IOC)实现。这个"helloIoc.zip"压缩包包含的是一组用于演示Spring IOC基本概念和使用的测试...

    spring控制反转的理解

    Spring框架的核心特性之一是控制反转(Inversion of Control,IoC),这与依赖注入(Dependency Injection,DI)密切相关。这两个概念都是为了实现软件组件之间的松耦合,从而提高系统的可扩展性和可维护性。 控制...

    IoC Spring 控制反转

    在深入了解Spring框架之前,我们首先需要理解“控制反转”(Inversion of Control,简称IoC)的概念。IoC是一种设计原则,旨在减少组件之间的耦合度,提高代码的可维护性和可测试性。在传统的编程模式中,组件或对象...

    Spring深入理解控制反转-IOC

    基于annotation注解方式理解SpringIOC控制反转

    自定义spring控制反转(依赖注入)

    在Spring框架中,控制反转(IoC,Inversion of Control)和依赖注入(DI,Dependency Injection)是核心设计理念,它们极大地简化了Java应用的开发和维护。本文将深入探讨如何自定义Spring实现读取`...

    Spring_控制反转_工厂模式

    **Spring框架中的控制反转(IoC)** 控制反转(Inversion of Control,简称IoC)是面向对象编程中的一种设计原则,它将对象的创建和管理责任从代码中剥离出来,交由一个外部容器(如Spring框架)来处理。这种模式...

    springIOC控制反转 依赖注入实例

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它改变了传统Java应用程序中对象的创建和管理方式。在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些...

    Spring .Net 控制反转

    首先,理解控制反转(IoC)的概念至关重要。传统的编程方式中,对象创建和管理是由程序员直接控制的,而 IoC 将这种控制权反转,使得容器负责对象的创建、配置和管理。这样做的好处是降低了代码间的耦合性,提高了...

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

    Spring的核心特性之一是依赖注入(Dependency Injection,简称DI),也称为控制反转(Inversion of Control,简称IoC)。 **依赖注入 (DI) 和 控制反转 (IoC)** 依赖注入是Spring的核心设计原则之一。它是一种设计...

    学习Spring笔记_IoC(控制反转)简介

    **Spring框架中的IoC(控制反转)概念** 在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心...

    Spring IOC控制反转 1

    **Spring IOC控制反转详解** 在Java开发中,Spring框架的核心特性之一就是IOC(Inversion of Control,控制反转),它改变了传统...通过阅读《控制反转小例子.doc》文档,你将能更深入地理解这些概念并掌握实践技巧。

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

    这样,对象间的依赖关系就由Spring框架来控制,这就是所谓的控制反转。 **Spring的XML配置** 在Spring框架中,XML配置文件是声明依赖注入的主要方式。在`Spring_01_入门篇_依赖注入(控制反转)_XML`中,我们可以...

    Spring框架IoC控制反转.pdf

    【Spring框架IoC控制反转】 一、Spring框架是什么 Spring框架是Java开发中的一款轻量级框架,诞生于2003年,旨在简化企业级应用的开发复杂性。Spring的核心理念包括控制反转(IoC)和面向切面编程(AOP)。作为一...

    Java仿Spring框架IOC控制反转利用反射简单实现(源码)

    Java中的控制反转(IOC,Inversion of Control)和Spring框架是现代企业级应用开发的核心概念。IOC使得应用程序的组件之间解耦,提高了代码的可测试性和可维护性。本篇文章将详细探讨如何通过反射机制来实现一个简单...

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

    在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心设计理念,它们旨在降低组件之间的耦合度,提高代码的可测试性和可维护性。理解这两个概念对于掌握...

    控制反转和容器(二)

    **控制反转(IoC)与容器** 控制反转(Inversion of Control,简称IoC)是一种设计模式,它在软件工程中被广泛应用于构建可扩展、松耦合的系统。这个概念的核心是将对象的创建和依赖关系的管理从应用程序代码中剥离...

Global site tag (gtag.js) - Google Analytics