DI(Dependency Injection) 依赖注入

209 阅读2分钟

概念:在Spring创建对象的同时,为其属性赋值,称之为依赖注入,当某个java实例需要其他java实例时,系统自动提供所需要的实例,无需程序现实获取。

其实不管是控制反转还是依赖注入,都可以这样理解:当某个java实例(调用者)需要另一个java实例(被调用者)时,在传统的程序设计过程中,通常有调用者来调用被调用者的实例,但是在依赖注入/控制反转模式下,创建调用者的工作不再是由调用者来完成,而是由Spirng容器来完成,然后注入调用者,

对与Spring而言、Spring采用动态、灵活的方式来管理各种对象,对象与对象之间的具体实现都是透明的,Spring的依赖注入对调用者和被调用者几乎没有任何的要求。

依赖注入通常有两种:
1. 设值注入:IOC容器通过使用属性的set方法来注入被依赖的实例。
2. 构造注入:IOC容器使用构造器俩注入被依赖的实例。

设值注入:

image.png

image.png

image.png

上面的代码实现了Person接口的userAxe()方法,实现该方法时调用了axe的chop()方法,这就是典型的依赖关系。

在这里Spring容器的作用就是以松耦合的方式管理这种调用关系,在上面的Chinese类中,Chinese类并不知道它要调用的axe实例在哪里,也不知道axe实例是如何实现的,它只是需要调用一个axe实例,这个axe实例将由Spring容器负责注入。

image.png

image.png

在配置文件中,Spring配置Bean实例通常会指定两个属性:
id:指定唯一的bean标识,程序会通过id属性值来访问该Bean实例。
class:指定该Bean的实现类,此处不可在用接口,必须是实现类,Spring容器会使用XML解析器读取该属性值,并用反射来创建该实现类的实例。

image.png 测试程序:

image.png

image.png

构造注入:

image.png 上面的类没有set方法,只是提供了一个带Axe属性的构造方法,Spring将通过该构造器为类注入所依赖的Bean实例。

image.png

image.png

image.png