依赖注入:当某个Java对象(调用者)需要调用另外一个Java对象(被调用者,即被依赖对象)时,在传统模式下,调用者通常会采用“new”被调用者的代码方式来创建对象,这种方式会导致调用者与被调用者之间的耦合性增加,不利于维护。在Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是依赖注入。
竟然有了依赖注入的概念,知道了“依赖”是个什么东西了,那么在Spring中是怎样注入的呢?
在Spring中基于xml配置常用的注入的方式有两种:构造函数的依赖注入和设值函数的依赖注入,下面会对这两种方式如何进行运用:
- 基于构造函数的依赖注入:
当容器调用带有一组参数的类构造函数时,基于构造函数的依赖注入就完成了,其中每个参数代表一个对其他类的依赖。
首先创建TextEditor类,并且该类有一个带参数(对象)的构造函数,代码如下:
然后,在创建一个TextEditor依赖的类SpellChecker.java,代码如下:
在配置文件applicationContext.xml中配置如下信息:
- 基于设值函数的依赖注入:
当容器调用一个无参的构造函数来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的依赖注入就完成了。
首先创建TextEditor类,并且该类需要把设值函数方法的名称转换。要设置一个变量 spellChecker,我们使用 setSpellChecker() 方法,该方法与 Java POJO 类非常相似。然后创建另一个依赖类文件 SpellChecker.java 的内容,代码如下:
然后在配置文件applicationContext.xml中配置如下信息:
最后,调用spring创建好的对象,代码如下:
在这两种依赖注入方式中,应该注意定义在基于构造函数注入和基于设值函数注入中的 applicationContext.xml 文件的区别。唯一的区别就是在基于构造函数注入中,我们使用的是〈bean〉标签中的〈constructor-arg〉元素,而在基于设值函数的注入中,我们使用的是〈bean〉标签中的〈property〉元素。第二个需要注意的点是,如果你要把一个引用传递给一个对象,那么你需要使用 标签的 ref 属性,而如果你要直接传递一个值,那么你应该使用 value 属性。