您的位置:首页 > 编程语言 > Java开发

Spring框架中IOC控制反转和DI依赖注入区别

2011-03-21 22:53 399 查看
IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。

DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

它们是spring核心思想的不同方面的描述。

DI 和 IOC

DI和IOC是差不多的概念。

一个重要特征是接口依赖,是把对象关系推迟到运行时去确定.

DI是一个初始化实例的过程,分为三种

1.setter based

2.constructor based

3.interface
based,

在spring
中就是应用前两种;但又不仅仅是初始化实例,而且是运用接口的概念去实现这种注入依赖。静态地看,只是依赖一个接口,但实际运行起来,是依赖一个实现了该
接口的具体类。

IOC就是面向接口编程的应用

1.一个通常的做法(非面向接口编程的方法),对象A依赖对象B,B会作为A的属性,可以理解为A直接控制B;

2.IOC的做法,对象A依赖于接口C,而不直接依赖于实现了接口C的B,也就是A不能直接控制是哪个具体实现了C的B去做相应的事情,而是由我们控制可以由哪个实现了接口C的B去处理,也就是控制反过来了,是由B来决定了,而不是由A,实现就是面向接口编程。

AOP

AOP是动态代理的应用,将具体业务和相应的其它方面(比如日志,权限之类的)划分开来,业务不会知道还有没有其它的功能来辅助,需要的话我就给他加上一个配置就可以,而不用去修改业务代码。

原先是这个样子


//日志

//权限

//业务代码



现在



//业务代码



而权限和日志则写在其它的类advice中,只要在配置中说明在调用业务方法时(或前,或后,或别的),调用一下advice就OK了。很容易把一个方面,比如权限或日志从业务代码中剥离出来。

在SPRING中,实现AOP的流程如下:

1.定义业务接口

2.定义业务实现类

3.定义interceptor注入类

4.配置Bean,设置class为proxyFactoryBean

设置其三个属性1.)proxyInterfaces为1

2.)interceptorNames为3

3.)target为2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: