`
wkf41068
  • 浏览: 458376 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring的Ioc和DI依赖注入的理解

阅读更多
	Sping  框架的核心就是IOC控制反转和DI依赖注入,并通过这两方面实现松耦合。

(1) 使用Ioc,对象是被动的接受依赖类,而不是自己主动去找。容器在实例化的时候主动将它的依赖类注入给它。

亦可以这样理解:控制反转将类的主动权转移到借口上,依赖注入通过xml配置文件在类实例化是将其依赖注入。

(2) 从UML查看java对象之间的关系即是依赖。 

例如:比如a对象依赖于b对象,那么a类中就会有b类的引用(简单理解就是拥有b类的这么一个属性),也就是说a对象要想执行一个完整的功能,

必须建立一个前提——a对象中的b类属性已经实例话,并且拥有b类的一切功能;现在可以去了解什么是依赖注入了,就像前面说过的,a对象想完

成一个完整的功能,要先为自己的b类属性实例化,而在MVC模式中,这种现象很常见,为了简化这种实例化的工作,spring容器就产生了,它可以

统一管理这种实例化频繁的操作,就是说这种本来应由自己实例化的工作交给Spring容器去控制了,也就是说控制反转了,实现的方案之一是在上

述a类中提供一个关于b类的setter方法,这个方法会被Spring容器控制。

(3) 从代码角度看实例:
假设有一个需求,类Business需要调用类DependencyClass的方法doMethod(),
按照日常的做法,得到如下代码示例:

//*类DependencyClass
publi class Dependency{

   public void doMethod(){};	
}

//**类Business
public class Business{
  DependencyClass  obj;
  public Business(){
	obj = new DependencyClass();
  }
  public  void doSth(){
	obj.doMethod();
  }
}


 先将Business里的DependencyClass实例的获得改为setter方式,
其次,将DependencyClass 类改为某个接口的实现,故有如下代码:

//**接口IDependency
public interface IDependency{
   void doMethod();
}

//**类Dependency
public class DependencyClass implements IDpendency{

   public void doMethod(){......}
}
//类Business
public class Business{
    Idependency obj;
    public Business(){}
    public void doSth(){
       ...
       obj.doMethod();
    }
    public void setObj(Idependency d){
	this.obj = d;	
   }
}
代码中可以看出:
(1) Business的变量obj可以接受任何IDenpendency的实例
(2) DependencyClass 的实例不是通过Business自己new出来,而是通过setter来由外部传给它。
此时考虑Business依赖的实例如何从外部注入,就要通过xml定义,spring容器再依据xml来实例化。

创建一个spring-context.xml
<beans>
 <bean id="dependency" class="*****.DependencyClass"> 实体类名包
 <bean id ="business"  class="****.Business">
    <proproty name="obj">
	<ref bean ="dependency"
    </property>	
 </bean>
</beans>
这里的配置文件将DependencyClass类和Business类加入,并将DependencyClass作为Business的一个 参数。
 容器加载通过xml来实例化相关的bean.
通过上面不难发现:
(1) Business 是通过接口IDependency来接受DependencyClass实例,所以
当我们又有新的IDenpendency的实现是,只需要修改xml文件即可,


通过上例可以总结出:
a. 依赖类是通过spring容器解析xml后来注入的,而不是使用它的类(Business)来自己制造,这就是依赖的注入。

b. Bussiness 对类Dependency 的依赖转移到对接口IDependency的依赖,控制权由类转移到了接口,即由"实现"转移到"抽象"中。

c. 通过将对实例的依赖,改为对接口的依赖。是面向接口编程的一个要义。也是程序解耦的一个措施。
分享到:
评论
2 楼 wkf41068 2015-08-20  
  谢谢!
1 楼 mistlxj 2015-07-15  
楼主,这篇文章解释的比较清楚,点个赞~

相关推荐

    Spring Ioc 注解 依赖注入

    其中,IoC和依赖注入(Dependency Injection, DI)是Spring框架最核心的部分之一。 #### 二、IoC容器概述 在传统的Java应用程序中,对象的创建和管理通常由程序员来完成。这种方式会导致代码之间存在高度耦合,难以...

    springIOC控制反转 依赖注入实例

    在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些任务由IOC容器来处理,实现了从依赖管理到依赖注入的转变。 控制反转(IOC)意味着应用程序不再直接创建对象,而是将对象的...

    Spring Ioc(依赖注入)入门例子--属性注入

    Spring的核心特性之一就是它的Inversion of Control(IoC,控制反转)容器,也被称为Dependency Injection(DI,依赖注入)。这个概念是Spring框架使应用程序组件之间解耦的关键。让我们深入探讨一下Spring的IoC和...

    什么是Ioc和DI

    在实际应用中,DI通常作为IoC容器的一部分来实现,例如Spring框架中的BeanFactory或ApplicationContext,它们都提供了依赖注入的功能,从而帮助开发人员遵循IoC的原则,构建出更加灵活、可维护的软件系统。...

    springIoc实现原理

    在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中,这些控制权被反转给了Spring容器,使得对象的生命周期管理和依赖注入变得更为灵活和可扩展。 **一、控制反转(IoC)概念*...

    Springioc注入Demo

    DI(Dependency Injection,依赖注入)是IOC的一种实现方式,通过配置或编程的方式,将对象之间的依赖关系在运行时动态注入,而不是由对象自己去查找和创建依赖。 在Spring IOC中,主要的注入方式有以下几种: 1. ...

    spring IOC容器依赖注入XML配置

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,极大地简化了应用程序的复杂性。在本教程中,我们将深入探讨如何通过XML配置在...

    SpringIoC和DI注解开发.pdf

    DI(Dependency Injection,依赖注入)是 IoC 的一种实现方式,它将组件之间的依赖关系交由框架来管理。 数据源(连接池) 数据源(连接池)是提高程序性能的一种方式,它可以在程序启动时实例化数据源,初始化...

    关于spring的AOP ,IOC,DI的理解

    Spring的核心特性包括AOP(面向切面编程)和IOC(控制反转),以及依赖注入(DI)。以下是对这些概念的详细解释: **面向切面编程(AOP)** AOP是一种编程范式,它允许开发者将关注点从主业务逻辑中分离出来,例如...

    笔记28-JAVAEE之Spring IoC&DI

    DI(Dependency Injection,即依赖注入)是Spring IoC的一种实现方式。它使得对象之间的依赖关系变得松散耦合,使得对象之间的耦合度降低。 在上面的代码中,我们使用了DI来实例化对象。例如,在Car类中,我们使用...

    我的Pro Spring 学习笔记 之二 控制反转(IoC)和依赖注入(DI), Spring初步

    在本文中,我们将深入探讨Spring框架的核心概念——控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)。这些概念是Spring框架的基础,对于理解和掌握Spring的使用至关重要。 首先,让...

    springioc和spring aop

    **依赖注入(DI)**有多种实现方式,包括构造器注入、setter注入和接口注入。构造器注入在创建对象时就注入依赖,setter注入则允许在对象创建后随时注入,接口注入则通过实现特定接口来注入依赖。选择哪种方式取决于...

    spring ioc和aop原理流程图(详细)

    3. **依赖注入(DI)**:是IOC的核心。Spring容器负责管理Bean的生命周期,并根据Bean之间的依赖关系进行实例化和装配。依赖可以通过属性注入、构造函数注入或方法注入等方式实现。 4. **Bean的作用域**:Spring...

    Spring 控制反转 依赖注入

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

    IOC控制反转&DI依赖注入

    在本项目中,"IOC技术思想和DI依赖注入"的实现可能包括以下几个方面: 1. 创建一个Spring配置文件,定义bean及其依赖关系。 2. 使用注解(如@Service、@Autowired)来标注bean和它们的依赖。 3. 编写业务逻辑类,...

    Spring IoC依赖包

    - **依赖注入(Dependency Injection, DI)**: Spring通过构造器注入、设值注入或者接口注入的方式,将对象的依赖关系以声明式的方式定义在配置文件或注解中,由Spring容器负责实例化和组装Bean。 - **AOP(面向切...

    “IOC容器与DI依赖注入示例”文章提及

    在Java世界中,Spring框架是应用最广泛的轻量级企业级开发框架,它的一大核心特性就是Inversion of Control(控制反转,简称IOC)和Dependency Injection(依赖注入,简称DI)。这两者是紧密相关的概念,有助于简化...

    day38 03-Spring的IOC和DI的区别

    标题中的"Spring的IOC和DI的区别"涉及到Spring框架的核心特性,即控制反转(Inversion of Control,简称IOC)和依赖注入(Dependency Injection,简称DI)。这两个概念是理解Spring框架工作方式的关键。 首先,控制...

    SpringIOC DI循环依赖实例详解

    SpringIOC 是一个基于依赖注入(Dependency Injection,简称 DI)的容器,用于管理 Bean 的生命周期。 DI 循环依赖是指在 Bean 初始化过程中出现的循环依赖问题,即一个 Bean 依赖于另一个 Bean,而后者又依赖于前者...

    SpringIoc示例代码

    2. **依赖注入(DI)**:Spring IOC的主要功能之一就是依赖注入。有两种方式实现DI:构造器注入和setter注入。构造器注入是在Bean实例化时通过构造函数传递依赖,而setter注入则是通过调用setter方法设置依赖。在`...

Global site tag (gtag.js) - Google Analytics