Spring教程-通过构造函数进行依赖注入示例
通过构造函数进行依赖注入示例
我们可以通过构造函数进行依赖注入。在 <bean> 标签的 <constructor-arg> 子元素用于进行构造函数注入。在这里,我们将演示:
- 注入基本类型和字符串类型的值
- 注入依赖对象(包含对象)
- 注入集合等。
注入基本类型和字符串类型的值
让我们看一个简单的例子来注入基本类型和字符串类型的值。我们创建了三个文件:
- Employee.java
- applicationContext.xml
- Test.java
Employee.java
这是一个简单的类,包含id和name两个字段。该类有四个构造函数和一个方法。
package cn.javatiku;
public class Employee {
private int id;
private String name;
public Employee() {
System.out.println("def cons");
}
public Employee(int id) {
this.id = id;
}
public Employee(String name) {
this.name = name;
}
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
void show() {
System.out.println(id + " " + name);
}
}
applicationContext.xml
这个文件中提供了bean的信息。<constructor-arg> 元素用于调用构造函数。在这种情况下,将调用带有int类型参数的构造函数。constructor-arg 元素的 value 属性将指定的值赋给构造函数。type 属性指定将调用int类型参数的构造函数。
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="e" class="cn.javatiku.Employee">
<constructor-arg value="10" type="int"></constructor-arg>
</bean>
</beans>
Test.java
这个类从applicationContext.xml文件中获取bean,并调用show方法。
package cn.javatiku;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test {
public static void main(String[] args) {
Resource r = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(r);
Employee s = (Employee) factory.getBean("e");
s.show();
}
}
输出结果: 10 null
注入字符串类型的值
如果在 <constructor-arg> 元素中不指定 type 属性,默认情况下将调用字符串类型的构造函数。
....
<bean id="e" class="cn.javatiku.Employee">
<constructor-arg value="10"></constructor-arg>
</bean>
如果将bean元素更改为上面的代码,将调用字符串参数的构造函数,输出结果将是:0 10。
输出结果: 0 10
你也可以这样传递字符串字面量:
....
<bean id="e" class="cn.javatiku.Employee">
<constructor-arg value="Sonoo"></constructor-arg>
</bean>
....
输出结果: 0 Sonoo
你可以同时传递整型字面量和字符串:
....
<bean id="e" class="cn.javatiku.Employee">
<constructor-arg value="10" type="int"></constructor-arg>
<constructor-arg value="Sonoo"></constructor-arg>
</bean>
....
输出结果: 10 Sonoo