假定:
实例化一个对象应当是严谨、有性能开销,应该尽可能不要new
所以,我们把实例化对象的控制权交给了spring ,spring读取配置文件,通过反射来创建对象,注入依赖,这就是控制反转的哲学及ioc的原理
参考书:spring in action
https://www.zhihu.com/question/23277575
为了方便理解,先给出结论:
控制反转是目的,依赖注入(di)是实现控制反转(ioc)的手段。
控制反转是一种面向对象的思想,它是一种宽泛的概念,只要一个类将对它内部状态的控制权交由其他机制去完成即为『控制反转』。控制反转是为了降低类与类之间的耦合度。
而Spring采用依赖注入这一具体的手段来达到控制反转的目的。
依赖注入的做法是:将被依赖对象的创建与维护工作交由专门的机构,而依赖类中只需要声明所需要的成员变量。
这点我有体会,说说自己的感受,刚刚开始学ioc的时候,首先觉得简单,代码简单,用起来也简单,但是最大的疑惑是为什么我明明一行代码就可以完成的,现在要这么麻烦来实现?还有一堆配置文件?
后面看了很多资料,加上自己的理解,我觉得ioc第一个好处是解耦,让大家养成面向接口编程的习惯。但这不是最重要的,最重要的控制了对象的创建,这才是最重要的地方!你想想,我们就是面向对象编程,什么最重要,对象啊!ioc控制了对象的生老病死,就等于控制了一切!
有了ioc,才有其他,如AOP,就是在给你对象的时候,加了其他功能(比如动态代理等),就好比给了你一个听命于他的间谍啊!没有ioc这些都无从说起!