Spring基于构造函数和设值函数的依赖注入

本文内容纲要:

- 基于构造函数的依赖注入

- 基于设值函数的依赖注入

基于构造函数的依赖注入

我们知道,bean标签中指定的类会进行初始化,这个初始化过程中自然会调用构造函数,那我们也可以利用这个构造函数完成依赖注入。

先创建一个类:

public class TextEditor {

public TextEditor(SpellChecker spellChecker) {

System.out.println("TextEditor的构造函数");

}

public TextEditor(String s) {

System.out.println(s);

}

}

如上,可以看见有两个构造函数。

第一个构造函数的参数是自定义类型,第二个是一个字符串类型。两种不同的参数类型在配置文件中的写法是不一样的,下面会提到。

再创建一个测试类:

public class MainApps {

public static void main(String[] args) {

AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

TextEditor editor = (TextEditor) context.getBean("text");

}

}

配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">

<constructor-arg type="java.lang.String" value="这是一个构造函数注入的值"/>

</bean>

配置文件中,除了常见的bean标签,需要使用constructor-arg标签来完成构造函数的注入。

运行测试类输出:

这是一个构造函数注入的值

如果向调用上面一个构造函数,配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">

  <constructor-arg ref="spellChecker"/>

</bean>

<bean id="spellChecker" class="Dependency.injection.SpellChecker"/>

注意:

1.如果你需要传递一个对象的引用,就直接用ref;如果你需要传递一个java自带的数据类型,则需要先在type里声明类型,再用value设置值。

2.如果构造参数的参数列表有多个参数,则传递的顺序就是参数列表的顺序。

基于设值函数的依赖注入

通过bean调用设值函数来完成依赖注入。

先准备一个类:

public class TextEditor {

private String name;

//设值函数

public void setName(String name) {

this.name = name;

}

public void getName() {

System.out.println(this.name);

}

}

注意私有属性name,下面会通过bean设置这个属性的值。

再准备一个测试类:

public class MainApps {

public static void main(String[] args) {

AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

TextEditor editor = (TextEditor) context.getBean("text");

editor.getName();

}

}

配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">

  <property name="name" value="李四"/>

</bean>

运行测试类输出:

李四

注意:

1.设值函数也可以传递引用,同样使用ref。

2.配置文件中,设值函数用的是property。构造函数注入用的是constructor-arg

本文内容总结:基于构造函数的依赖注入,基于设值函数的依赖注入,

原文链接:https://www.cnblogs.com/lbhym/p/11929805.html

以上是 Spring基于构造函数和设值函数的依赖注入 的全部内容, 来源链接: utcz.com/z/295877.html

回到顶部