【设计模式】控制反转(IoC)与依赖注入(DI)
来源:互联网 发布:ajax跨域请求不是json 编辑:程序博客网 时间:2024/06/04 19:40
控制反转和依赖注入实际做的就是同一件事情,只不过实现角度不同,在此我把它们划为一类。
1,概念
1)控制反转
是框架的重要特征。成熟较晚,故未包含在GOF种。
控制反转把对象生成放在XML种,当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口),只要修改XML即可,实现了对象的热插拔。
同时,IoC的对象生成使用了反射变成,损耗了效率,但提高了维护性和灵活性。另外,重构较为困难,如果更改了类名,还需要在xml文件种手动修改。
2)接口驱动
接口驱动可以提供不同灵活的子类实现,增加代码稳定和健壮性。
2,实现
1)依赖查找
容器提供回调接口和上下文条件给组件。这样一来,组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在那些回调方法上:容器将调用这些回调方法,从而让应用代码获得相关资源。
从容器的角度描述:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
2)依赖注入
依赖注入(Dependency Injection,DI)
DI是一个重要的面向对象编程法则来削减计算机程序的耦合问题M降低了组件之间的耦合性。
从应用程序的角度:应用程序依赖容器创建并注入它所需要的外部资源。
可以使应用程序的配置和依赖性规范与实际的应用程序代码分开。通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
DI使用接口编程,在对象使用时动态注入。
有3种注入方式:
①>构造函数注入(Contructor Injection)
最简单的依赖注入方式.
public class MovieLister { private MovieFinder finder; public MovieLister(MovieFinder finder) { this.finder = finder; } ...}
②setter注入
public class MovieLister { s... public void setFinder(MovieFinder finder) { this.finder = finder; }}
③接口注入
接口注入使用接口来提供setter方法,其实现方式如下。
首先要创建一个注入使用的接口。
public interface InjectFinder { void injectFinder(MovieFinder finder);}
class MovieLister implements InjectFinder { ... public void injectFinder(MovieFinder finder) { this.finder = finder; } ...}
阅读全文
0 0
- 【设计模式】控制反转(IoC)与依赖注入(DI)
- IOC(控制反转) DI(依赖注入)
- IoC(控制反转)与DI(依赖注入)
- 控制反转(IOC)与依赖注入(DI)
- 反转控制(IOC)与依赖注入(DI)
- 控制反转(IOC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- Spring 控制反转(IOC)与依赖注入(DI)
- Spring控制反转与依赖注入(IOC && DI)
- 控制反转与依赖注入(IOC和DI)
- SpringMVC学习-->控制反转(IoC)与依赖注入(DI
- php设计模式-Ioc(控制反转)和Di(依赖注入)
- 控制反转(IoC)与依赖注入(DI)
- 第五周 项目一 建立顺序栈算法库
- quarz定时任务
- 【第四周项目4】建设双链表算法库
- html 札记
- CSR:SSL证书的孵化器
- 【设计模式】控制反转(IoC)与依赖注入(DI)
- java中double运算的精度丢失问题
- VMware vcenter上传文件失败且vsphere client登陆失败。
- Android深度探索:HAL与驱动开发学习笔记--中断
- vpn
- c++设计模式四,接口模式
- 数据库的九大对象
- NB-IoT的发展是否一片光明?
- 第5周项目1- 建立顺序栈算法库