Spring DI 和IOC 的一点区别
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