Spring是为了降低企业级应用开发复杂性而开发的框架,IoC控制反转和DI依赖注入是Spring的核心部分。
IoC:控制反转
IoC其实是一种思想,让我们从繁琐的对象交互中解脱出来,更注重于对象本身。就是把创建对象和管理对象依赖关系的权力交给IoC容器管理,这种控制权的转移被形象的称为控制反转。
DI:依赖注入
依赖注入是指Spring 创建对象的过程中,将对象依赖属性通过配置文件或其他形式注入到该对象中。
IoC&DI有什么用?
传统应用开发时,当某个类需要依赖其他类时,我们都是主动创建出来。引入了IoC&DI之后,所有的类都会在IoC容器中登记,只需告诉容器你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西,这样就能降低了类与类之间的耦合度。
IoC和DI的关系
IoC和DI是从不同的角度描述同一件事情,或者说通过依赖注入的方式实现了控制反转思想。
参考 Martin Fowler 2004年写的《nversion of Control Containers and the Dependency Injection pattern》
2004年,Martin Fowler 探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。