构造函数|Spring 基于构造函数的依赖注入


当容器调用带有一组参数的类构造函数时 , 基于构造函数的依赖注入就完成了 , 其中每个参数代表一个对其他类的依赖 。
看个例子:
TextEditor的源代码:
public class TextEditor { private SpellChecker spellChecker public TextEditor(SpellChecker spellChecker) { System.out.println("Inside TextEditor constructor." ) this.spellChecker = spellChecker } public void spellCheck() { spellChecker.checkSpelling() } }
TextEditor的构造函数里有一个参数 , 代表对SpellChecker的依赖 。
SpellChecker的源代码:
public class SpellChecker { public SpellChecker(){ System.out.println("Inside SpellChecker constructor." ) } public void checkSpelling() { System.out.println("Inside checkSpelling." ) }}
MainApp.java的内容:
【构造函数|Spring 基于构造函数的依赖注入】import org.springframework.context.ApplicationContextimport org.springframework.context.support.ClassPathXmlApplicationContextpublic class MainApp { public static void main(String[] args) { ApplicationContext context =new ClassPathXmlApplicationContext("Beans.xml") TextEditor te = (TextEditor) context.getBean("textEditor") te.spellCheck() }}
Beans.xml的内容:

&ltbeans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt&ltbean id="textEditor" class="com.sap.TextEditor"&gt &ltconstructor-arg ref="spellChecker"/&gt bean&gt
&ltbean id="spellChecker" class="com.sap.SpellChecker"&gt bean&gtbeans&gt 通过构造函数注入依赖的核心是这个标签:

构造函数|Spring 基于构造函数的依赖注入
本文插图

单步调试观察:创建Spring IOC容器:
构造函数|Spring 基于构造函数的依赖注入
本文插图

创建TextEditor bean实例:
构造函数|Spring 基于构造函数的依赖注入
本文插图

检测到构造函数里有一个参数依赖:
构造函数|Spring 基于构造函数的依赖注入
本文插图

依赖于另一个bean:spellChecker
构造函数|Spring 基于构造函数的依赖注入
本文插图

因此SpellChecker实例也被创建出来了:
构造函数|Spring 基于构造函数的依赖注入
本文插图

输出:
Inside SpellChecker constructor.Inside TextEditor constructor.Inside checkSpelling.
如果你想要向一个对象传递一个引用 , 你需要使用 标签的 ref 属性 , 如果你想要直接传递值 , 那么你应该使用如上所示的 value 属性 。
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。邮箱地址:newmedia@xxcb.cn


    推荐阅读