通过构造函数进行依赖注入示例

我们可以通过构造函数进行依赖注入。在 <bean> 标签的 <constructor-arg> 子元素用于进行构造函数注入。在这里,我们将演示:

  1. 注入基本类型和字符串类型的值
  2. 注入依赖对象(包含对象)
  3. 注入集合等。

注入基本类型和字符串类型的值

让我们看一个简单的例子来注入基本类型和字符串类型的值。我们创建了三个文件:

  • 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

标签: spring, Spring教程, Spring技术, Spring语言学习, Spring学习教程, Spring下载, Spring框架, Spring框架入门, Spring框架教程, Spring框架高级教程, Spring面试题, Spring笔试题, Spring编程思想