(Spring的核心机制)理解依赖注入

当某个java实例(调用者)需要另一个java实例(被调用者)时,传统的程序中,通常由调用者先创建被调用者,再创建被调用者的实例,就好比如一个普通人使用电脑,还需要需创造出一台电脑,再使用.这是显示调用.
在依赖注入(其实是通过配置文件的形式处理好协作关系,隐式调用)的模式下,创建被调用者的工作不再由调用者来完成,称控制反转;创建被调用者的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入.
不管是依赖注入,还是控制反转,都说明Spring采用动态,灵活的方式来管理各种对象.对象与对象之间的具体实现互相透明.

第一种调用java实例的方法:创建和使用是同一个
传统的方法有如下坏处:
可扩展性差,由于"人"组件与"电脑"组件的实现类高度耦合(相当于关系密切),如果电脑想扩展某些功能时,人组件的代码也要随之改变.
各组件职责不清:一个普通人想使用电脑,他还要去创造电脑出来.但在实际生活中,制造电脑的人跟我们使用电脑的通常只有交易的联系.电脑的更新换代由厂商负责.

第二种:实现接口
调用者无须关心被调用者的具体实现过程,只需要找到符合某种标准的实例,即可使用.此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也就是工厂模式,但是调用者依然需要主动定位工厂,调用者与工厂耦合在一起.相当于一个人想买电脑,厂商负责生产了,但是这个人需要跑到厂商具体生产位置购买电脑,显然,这种方式是不合理的.

第三种:最理想的就是程序无须理会被调用者的实现,也无须主动定位工厂,实例之间的依赖关系由IOC容器负责管理.相当于买电脑的不需要千里迢迢找工厂位置才能购买电脑了,无须知道生产电脑的地方在哪里,会有人主动拿回来,在你需要的时候,直接提供.

所谓依赖注入:是指程序运行过程中,如果需要另一个对象协作(调用它的方法,访问它的属性)时,无须在代码中创建被调用者,而是依赖于外部容器的注入.(就像不同电脑品牌的推销员会主动像你推销电脑).Spring 的依赖注入对调用者和被调用几乎没有任何要求,完全支持POJP之间依赖关系的管理.

依赖注入通常有如下两种(推销员向你推销的方式):
设置注入:IOC容器使用属性的setter方法来注入被依赖的实例
构造注入:IOC容器使用构造器来注入被依赖的实例

IOC容器:Inversion of Control (控制反转),传统使用java对象,控制程序需要主动去依赖对象,创建对象.但IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建.就好比如很久以前,电脑的产生是由使用的人决定的,使用的人需要主动去制造一台电脑,现在不同了,由厂商决定要不要制造,完全不由使用的人控制.
Spring IOC容器的3各基本要点:
1.应用程序的各组件面向接口编程.面向接口编程可以将各组件之间的耦合提升到接口层次.从而有利项目后期的扩展
2.应用程序的各组件不再由程序主动产生,而是由Spring容器来负责产生,并初始化,
3.Spring 采用配置文件,或Anntation来管理Bean的实现类,依赖关系,Spring容器则根据配置文件,利用反射来创建实例,并为之注入依赖关系.

1.设值注入
是指IOC容器使用属性的setter方法来注入被依赖的实例.这种注入方式简单,直观,因而在Spring的依赖注入里大量使用.(通过setter方法为目标Bean注入依赖关系)

2.构造注入
在构造实例时,已经为其完成了依赖关系的初始化.这种利用构造器来设置依赖关系的方式,被称为构造注入.

查看https://blog.csdn.net/LPLIFE/article/details/79672106了解这两种注入的区别






















猜你喜欢

转载自blog.csdn.net/lplife/article/details/79672119