请参看 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基础知识更加理解。
spring很好的例子,相当容易理解,保证几分钟理解spring
NULL 博文链接:https://hgxs-org.iteye.com/blog/1469237
IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法 。... 在Spring中实现控制反转的是IOC容器 ,其 实现方法是依赖注入 (Dependency Injection,DI)
此文档仅供初学者学习,包括Spring的依赖注入(控制反转)的详细实例。以三层贯穿实例(持久层、业务层、控制层),由MAIN方法直接调用测试用例。
主要介绍了理解Spring中的依赖注入和控制反转,具有一定参考价值,需要的朋友可以了解下。
Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! 控制权:对象的创建和调用关系的控制. (3)DI概念 Dependecy Injection 依赖注入 Spring 使用DI技术实现了IoC控制。 a.setter注入...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
第1章 控制反转和容器 1.1 使用容器管理组件 1.1.1 问题描述 1.1.2 解决方案 1.1.3 实现方法 1.2 使用服务定位器降低查找组件的复杂性 1.2.1 问题描述 1.2.2 解决方案...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
第1章 控制反转和容器 1.1 使用容器管理组件 1.1.1 问题描述 1.1.2 解决方案 1.1.3 实现方法 1.2 使用服务定位器降低查找组件的复杂性 1.2.1 问题描述 1.2.2 解决方案...
其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...
Spring框架学习中的核心,控制反转IOC,理解Spring框架主要注入所依赖的资源,解耦开发
)控制反转 )对象被动的接受依赖类 )对象主动的去找依赖类 )一定要用接口 )下面关于AOP的理解,正确的是(B C)(选择两项) )面向纵向的开发 )面向横向的开发 )AOP关注是面 )AOP关注的是点
第1章 控制反转和容器 1.1 使用容器管理组件 1.1.1 问题描述 1.1.2 解决方案 1.1.3 实现方法 1.2 使用服务定位器降低查找组件的复杂性 1.2.1 问题描述 1.2.2 解决方案 ...
在自学Spring Framework 开发参考手册2.5时做的学习笔记,其中在遇到手册上不能理解的地方的时候,在网上找了一些比较好的文档也放在了里面。
1、介绍了spring的概念 2、介绍了spring的控制反转IOC 3、介绍了spring的面向切面的编程AOP概念以及应用 4、介绍了spring的模板Template 5、spring与Struts的集成
1,spring是一个开源的免费的框架(容器)。 2,spring是一个轻量级的,非入侵式的框架。 非入侵式:就是项目引入了这个框架之后,...总结:spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。
在spring框架中对象实例改由spring框架创建,spring容器负责控制程序之间的关系,这就是spring的控制反转。在spring容器的角度看来,spring容器负责将被依赖对象赋值给成员变量,这相当于为实例对象注入了它所依赖的...