构造函数|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的内容: <beans 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"><bean id="textEditor" class="com.sap.TextEditor"> <constructor-arg ref="spellChecker"/> bean>
<bean id="spellChecker" class="com.sap.SpellChecker"> bean>beans> 通过构造函数注入依赖的核心是这个标签:
本文插图
单步调试观察:创建Spring IOC容器:
本文插图
创建TextEditor bean实例:
本文插图
检测到构造函数里有一个参数依赖:
本文插图
依赖于另一个bean:spellChecker
本文插图
因此SpellChecker实例也被创建出来了:
本文插图
输出:
Inside SpellChecker constructor.Inside TextEditor constructor.Inside checkSpelling.
如果你想要向一个对象传递一个引用 , 你需要使用 标签的 ref 属性 , 如果你想要直接传递值 , 那么你应该使用如上所示的 value 属性 。
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。邮箱地址:newmedia@xxcb.cn