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. 通过将对实例的依赖,改为对接口的依赖。是面向接口编程的一个要义。也是程序解耦的一个措施。
分享到:
相关推荐
其中,IoC和依赖注入(Dependency Injection, DI)是Spring框架最核心的部分之一。 #### 二、IoC容器概述 在传统的Java应用程序中,对象的创建和管理通常由程序员来完成。这种方式会导致代码之间存在高度耦合,难以...
在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些任务由IOC容器来处理,实现了从依赖管理到依赖注入的转变。 控制反转(IOC)意味着应用程序不再直接创建对象,而是将对象的...
Spring的核心特性之一就是它的Inversion of Control(IoC,控制反转)容器,也被称为Dependency Injection(DI,依赖注入)。这个概念是Spring框架使应用程序组件之间解耦的关键。让我们深入探讨一下Spring的IoC和...
在实际应用中,DI通常作为IoC容器的一部分来实现,例如Spring框架中的BeanFactory或ApplicationContext,它们都提供了依赖注入的功能,从而帮助开发人员遵循IoC的原则,构建出更加灵活、可维护的软件系统。...
在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中,这些控制权被反转给了Spring容器,使得对象的生命周期管理和依赖注入变得更为灵活和可扩展。 **一、控制反转(IoC)概念*...
DI(Dependency Injection,依赖注入)是IOC的一种实现方式,通过配置或编程的方式,将对象之间的依赖关系在运行时动态注入,而不是由对象自己去查找和创建依赖。 在Spring IOC中,主要的注入方式有以下几种: 1. ...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,极大地简化了应用程序的复杂性。在本教程中,我们将深入探讨如何通过XML配置在...
DI(Dependency Injection,依赖注入)是 IoC 的一种实现方式,它将组件之间的依赖关系交由框架来管理。 数据源(连接池) 数据源(连接池)是提高程序性能的一种方式,它可以在程序启动时实例化数据源,初始化...
Spring的核心特性包括AOP(面向切面编程)和IOC(控制反转),以及依赖注入(DI)。以下是对这些概念的详细解释: **面向切面编程(AOP)** AOP是一种编程范式,它允许开发者将关注点从主业务逻辑中分离出来,例如...
DI(Dependency Injection,即依赖注入)是Spring IoC的一种实现方式。它使得对象之间的依赖关系变得松散耦合,使得对象之间的耦合度降低。 在上面的代码中,我们使用了DI来实例化对象。例如,在Car类中,我们使用...
在本文中,我们将深入探讨Spring框架的核心概念——控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)。这些概念是Spring框架的基础,对于理解和掌握Spring的使用至关重要。 首先,让...
**依赖注入(DI)**有多种实现方式,包括构造器注入、setter注入和接口注入。构造器注入在创建对象时就注入依赖,setter注入则允许在对象创建后随时注入,接口注入则通过实现特定接口来注入依赖。选择哪种方式取决于...
3. **依赖注入(DI)**:是IOC的核心。Spring容器负责管理Bean的生命周期,并根据Bean之间的依赖关系进行实例化和装配。依赖可以通过属性注入、构造函数注入或方法注入等方式实现。 4. **Bean的作用域**:Spring...
**Spring 框架中的控制反转 (IoC) 和依赖注入 (DI)** 在软件开发中,控制反转(Inversion of Control,简称IoC)是一种设计原则,它将对象的创建和管理权从代码中剥离出来,转交给一个外部容器(如Spring框架)。...
在本项目中,"IOC技术思想和DI依赖注入"的实现可能包括以下几个方面: 1. 创建一个Spring配置文件,定义bean及其依赖关系。 2. 使用注解(如@Service、@Autowired)来标注bean和它们的依赖。 3. 编写业务逻辑类,...
- **依赖注入(Dependency Injection, DI)**: Spring通过构造器注入、设值注入或者接口注入的方式,将对象的依赖关系以声明式的方式定义在配置文件或注解中,由Spring容器负责实例化和组装Bean。 - **AOP(面向切...
在Java世界中,Spring框架是应用最广泛的轻量级企业级开发框架,它的一大核心特性就是Inversion of Control(控制反转,简称IOC)和Dependency Injection(依赖注入,简称DI)。这两者是紧密相关的概念,有助于简化...
标题中的"Spring的IOC和DI的区别"涉及到Spring框架的核心特性,即控制反转(Inversion of Control,简称IOC)和依赖注入(Dependency Injection,简称DI)。这两个概念是理解Spring框架工作方式的关键。 首先,控制...
SpringIOC 是一个基于依赖注入(Dependency Injection,简称 DI)的容器,用于管理 Bean 的生命周期。 DI 循环依赖是指在 Bean 初始化过程中出现的循环依赖问题,即一个 Bean 依赖于另一个 Bean,而后者又依赖于前者...
2. **依赖注入(DI)**:Spring IOC的主要功能之一就是依赖注入。有两种方式实现DI:构造器注入和setter注入。构造器注入是在Bean实例化时通过构造函数传递依赖,而setter注入则是通过调用setter方法设置依赖。在`...