东营组建网站,常用的网站打不开,wordpress怎么用啊,广宁城乡建设网站转载自 Spring 基于构造函数的依赖注入
Spring 基于构造函数的依赖注入
当容器调用带有一组参数的类构造函数时#xff0c;基于构造函数的 DI 就完成了#xff0c;其中每个参数代表一个对其他类的依赖。
示例#xff1a;
下面的例子显示了一个类 TextEditor#xff0c…转载自 Spring 基于构造函数的依赖注入
Spring 基于构造函数的依赖注入
当容器调用带有一组参数的类构造函数时基于构造函数的 DI 就完成了其中每个参数代表一个对其他类的依赖。
示例
下面的例子显示了一个类 TextEditor只能用构造函数注入来实现依赖注入。
让我们用 Eclipse IDE 适当地工作并按照以下步骤创建一个 Spring 应用程序。
步骤描述1创建一个名为 SpringExample 的项目并在创建的项目中的 src 文件夹下创建包 com.tutorialspoint 。2使用 Add External JARs 选项添加必需的 Spring 库解释见 Spring Hello World Example chapter.3在 com.tutorialspoint 包下创建 Java类 TextEditorSpellChecker 和 MainApp。4在 src 文件夹下创建 Beans 的配置文件 Beans.xml 。5最后一步是创建所有 Java 文件和 Bean 配置文件的内容并按照如下所示的方法运行应用程序。
这是 TextEditor.java 文件的内容
package com.tutorialspoint;
public class TextEditor {private SpellChecker spellChecker;public TextEditor(SpellChecker spellChecker) {System.out.println(Inside TextEditor constructor. );this.spellChecker spellChecker;}public void spellCheck() {spellChecker.checkSpelling();}
}
下面是另一个依赖类文件 SpellChecker.java 的内容
package com.tutorialspoint;
public class SpellChecker {public SpellChecker(){System.out.println(Inside SpellChecker constructor. );}public void checkSpelling() {System.out.println(Inside checkSpelling. );}
}
以下是 MainApp.java 文件的内容
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(Beans.xml);TextEditor te (TextEditor) context.getBean(textEditor);te.spellCheck();}
}
下面是配置文件 Beans.xml 的内容它有基于构造函数注入的配置
?xml version1.0 encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd!-- Definition for textEditor bean --bean idtextEditor classcom.tutorialspoint.TextEditorconstructor-arg refspellChecker//bean!-- Definition for spellChecker bean --bean idspellChecker classcom.tutorialspoint.SpellChecker/bean/beans
当你完成了创建源和 bean 配置文件后让我们开始运行应用程序。如果你的应用程序运行顺利的话那么将会输出下述所示消息
Inside SpellChecker constructor.
Inside TextEditor constructor.
Inside checkSpelling.构造函数参数解析:
如果存在不止一个参数时当把参数传递给构造函数时可能会存在歧义。要解决这个问题那么构造函数的参数在 bean 定义中的顺序就是把这些参数提供给适当的构造函数的顺序就可以了。考虑下面的类:
package x.y;
public class Foo {public Foo(Bar bar, Baz baz) {// ...}
}
下述配置文件工作顺利
beansbean idfoo classx.y.Fooconstructor-arg refbar/constructor-arg refbaz//beanbean idbar classx.y.Bar/bean idbaz classx.y.Baz/
/beans
让我们再检查一下我们传递给构造函数不同类型的位置。考虑下面的类
package x.y;
public class Foo {public Foo(int year, String name) {// ...}
}
如果你使用 type 属性显式的指定了构造函数参数的类型容器也可以使用与简单类型匹配的类型。例如
beansbean idexampleBean classexamples.ExampleBeanconstructor-arg typeint value2001/constructor-arg typejava.lang.String valueZara//bean/beans
最后并且也是最好的传递构造函数参数的方式使用 index 属性来显式的指定构造函数参数的索引。下面是基于索引为 0 的例子如下所示
beansbean idexampleBean classexamples.ExampleBeanconstructor-arg index0 value2001/constructor-arg index1 valueZara//bean/beans
最后如果你想要向一个对象传递一个引用你需要使用 标签的 ref 属性如果你想要直接传递值那么你应该使用如上所示的 value 属性。