一提到依赖注入想到最多的就是Spring。没错,依赖注入是Spring的核心机制。依赖注入让bean与bean之间以配置文件的形式组织在一起,而不是以编码的方式耦合在一起。以前只是知道有这么个概念,今天小编详细给大家介绍一下:何为依赖注入。
1)对依赖注入的理解:
当某个Java实例(调用者)需要另一个Java实例(被调用者)时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此成为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
2)编织知识网:
从网上找了一个例子帮助理解下依赖注入的概念:
(1)在原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)对应的情形为:Java程序里的调用者自己创建被调用者,通常采用new关键字调用构造器创建一个被调用者,这是Java初学者经常干的事情
(2)进入工业社会,工厂出现了,斧子不再由普通人完成,而在工厂里被生成出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无需关系斧子的制造过程。对应简单工厂设计模式,调用者只需要定位工厂,无需管理被调用者具体的实现。
(3)进入“共产主义”社会,需要斧子的人甚至无须定位工厂,“坐等”社会提供即可。调用者无须关心被调用者的实现,无须理会工厂,等待Spring依赖注入。
2.1)对上图的解释:
如上图7.8描述的就是原始社会中如果有人使用斧子就需要自己主动去制造一把斧子。这也就是刚才理解的第一种情况:调用者需要主动去创建被调用者。
到了图7.9中在IOC容器中,人使用斧子,不是人主动去制造斧头,而是在容器中制造好了斧头,人在使用的时候尽管拿去就好了,这个时候调用者不再需要主动创建被调用者,而是通过转交给容器实现了控制的反转。这种情况就是今天小编给大家说的依赖注入。
3)官方解释:
所谓依赖注入,是指程序运行过程中,如果需要另外一个对象协作(调用它的方法、访问它的属性)时,无须在代码中创建被调用者,而是依赖于外部容器的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。
4)依赖注入的常见的两种形式:
(2)构造注入:IOC容器使用构造器来注入被依赖的实例。
5)学习小结:
通过这一阶段对依赖注入的学习,发现无处不知识,无处不学问。需要我们认真探索,并且还要做到的是在实践中检验其真实性。