Inversion of Control,中文名控制反转。传统的开发过程当中,对象的建立由程序来控制,或者说由程序员来控制。使用Spring框架后,由Spring容器负责对象的建立和管理,这样在程序中,就下降了代码之间的依赖,下降了项目的耦合度。程序员
控制的含义:在传统开发过程当中,由程序主动去建立依赖的对象,也就是程序控制对象的生成。而IOC是有一个专门的容器来控制对象的生命周期。编程
反转的含义:正转是程序主动获取依赖对象,反转是容器帮忙建立对象,并注入到程序中,程序被动接收由容器建立的对象。什么被反转了?依赖对象的获取方式被反转了,由程序主动建立->程序被动接收。框架
DI,Dependency Injection,中文名依赖注入。组件之间的依赖关系由容器在程序运行过程当中决定,换句话说,容器在程序运行期间,动态的将组件之间的依赖关系,注入到组件中。这么作并不会为程序带来更多的功能,可是能够提高组件重用的能力,创建一个耦合度低、扩展度高、灵活性强的项目。经过依赖注入,代码里只须要接收所须要的资源,而不关心资源从何处来,如何实现资源,程序员也能够将更多精力放在业务逻辑上。若是组件之间的依赖关系发生改变,也不须要修改源代码,由于代码里并无显式的依赖关系,依赖是由容器注入到程序中的,只须要修改配置文件便可。spa
通常来讲,实现依赖注入同时须要咱们面向接口编程,而不是面向实现类编程,由于接口是抽象的,实现类是具体的,若是一个类A依赖于一个具体类B,那么当业务发生改变,依赖须要变为具体类C时,类A的代码也须要改变。而若是采用面向接口编程,让B、C都实现接口X,那么类A依赖的就是接口X,若是业务改变,咱们只须要注入接口X不一样的实现类便可,不须要修改A的源码。对象
关于依赖注入的几个基本问题接口
1.谁依赖谁? 程序(代码)依赖容器生命周期
2.为何须要依赖? 由于程序(好比某个对象)须要得到某种资源(对象、文件等等)资源
3.谁注入谁? 容器注入程序(对象)
4.注入了什么? 注入了某个对象须要的外部资源(别的对象、文件、数据等等)开发