从接触spring框架开始,控制反转这个名词也不算陌生了,一直模模糊糊没用弄清楚它真正的含义,知道今天算是比较清楚地明白了。
讲spring中的控制反转,我们先要从一个例子说起:
比如一个类A中,需要用到另一个类B的方法,那么我们就要在A中实例化B,然后调用B的方法。代码如下:
Class A{
private Class b = new ClassB();
b.active();
}
假设,我们还有C类,D类等。他们也都要用到B的方法,同样地他们也需要实例化B,然后调用B的方法。如果B的实例化是一个十分消耗系统资源的过程,比如数据库连接等。那么这样每次一个类中需要调用B的方法,就要实例化B一次,这将是一个非常消耗系统资源的过程。
在Spring框架中是怎么做的呢?
Spring框架控制反转我是这样理解的,我们每次使用spring框架不是要配置xml文件,这个xml配置bean的id和class。spring中默认的bean为单实例模式,而且通过bean的class,通过反射机制可以创建这个实例,因此,spring框架通过反射替我们创建好了实例并且替我们维护他们。A需要引用B类,在xml我们通过构造器或者是属性把B注入到A中,
其实就是spring框架,把B实例的引用传给了A的成员变量。
读了上面你就会明白,之前需要在A类来负责创建B的实例,现在创建的工作交给了Spring框架,然后spring框架类注入实例的引用。创建对象的责任的转移,即我们理解的控制反转。同时,spring替我们维护B这个单实例,我们一个新的类需要引用时,就不需要重复地实例化B类了,这也减少了系统资源的消耗。
以上就是我所理解的spring的控制反转(依赖注入)带来的好处。