IOC/DI是什么(一)

Inversion of Control,中文名控制反转。传统的开发过程中,对象的创建由程序来控制,或者说由程序员来控制。使用Spring框架后,由Spring容器负责对象的创建和管理,这样在程序中,就降低了代码之间的依赖,降低了项目的耦合度。

控制的含义:在传统开发过程中,由程序主动去创建依赖的对象,也就是程序控制对象的生成。而IOC是有一个专门的容器来控制对象的生命周期。

反转的含义:正转是程序主动获取依赖对象,反转是容器帮忙创建对象,并注入到程序中,程序被动接收由容器创建的对象。什么被反转了?依赖对象的获取方式被反转了,由程序主动创建->程序被动接收。

DI,Dependency Injection,中文名依赖注入。组件之间的依赖关系由容器在程序运行过程中决定,换句话说,容器在程序运行期间,动态的将组件之间的依赖关系,注入到组件中。这么做并不会为程序带来更多的功能,但是可以提升组件重用的能力,建立一个耦合度低、扩展度高、灵活性强的项目。通过依赖注入,代码里只需要接收所需要的资源,而不关心资源从何处来,如何实现资源,程序员也可以将更多精力放在业务逻辑上。如果组件之间的依赖关系发生改变,也不需要修改源代码,因为代码里并没有显式的依赖关系,依赖是由容器注入到程序中的,只需要修改配置文件即可。

一般来说,实现依赖注入同时需要我们面向接口编程,而不是面向实现类编程,因为接口是抽象的,实现类是具体的,如果一个类A依赖于一个具体类B,那么当业务发生改变,依赖需要变为具体类C时,类A的代码也需要改变。而如果采用面向接口编程,让B、C都实现接口X,那么类A依赖的就是接口X,如果业务改变,我们只需要注入接口X不同的实现类即可,不需要修改A的源码。

关于依赖注入的几个基本问题

1.谁依赖谁?            程序(代码)依赖容器

2.为什么需要依赖?  因为程序(比如某个对象)需要获得某种资源(对象、文件等等)

3.谁注入谁?            容器注入程序(对象)
4.注入了什么?         注入了某个对象需要的外部资源(别的对象、文件、数据等等)

猜你喜欢

转载自my.oschina.net/u/3733854/blog/1603631