如何在spring中为各种构造函数注入值

时间:2018-01-12 08:31:55

标签: java spring dependency-injection inversion-of-control

嗨,我是弹簧技术的新手。 我有一个名为Employee的类,如下所示,它有2个不同参数类型的构造函数。 我可以按照xml文件中的描述将值注入其中一个构造函数。 我可以知道如何使用构造函数注入向其他构造函数注入值。 我尝试了各种可能性,但无法弄清楚如何去做。

public class Employee {
    private int eno ;
    private String name ;
    private double salary ;
    private String desig ;

    public Employee(int eno, String name) {
        this.eno = eno;
        this.name = name;
    }

    public Employee(double salary, String desig) {
        this.salary = salary;
        this.desig = desig;
    }

    public void showInjectedValues() {
        System.out.println("Eno : " + eno);
        System.out.println("name : " + name);
        System.out.println("salary : " + salary);
        System.out.println("desig : " + desig);
    }

}

尝试使用spring.xml注入和注入的Java类如下:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InjectionTest {
    static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springconfig.xml");

    public static void main(String[] args) {

        Employee employee = (Employee) applicationContext.getBean("employee");
        employee.showInjectedValues();

    }

}

applicationContext.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<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.2.xsd">

    <bean id="employee" class="com.vidvaan.spring.Employee">

        <constructor-arg value="2000" index="0" type="double" />
        <constructor-arg value="team lead" index="1"
            type="java.lang.String"     />

    </bean>
</beans>

2 个答案:

答案 0 :(得分:0)

You can create a another bean like this for different arguments: 
 <bean id = "employeeBean" class = "com.vidvaan.spring.Employee">
      <constructor-arg type = "int" value = "2001"/>
      <constructor-arg type = "java.lang.String" value = "Employee"/>
   </bean>

答案 1 :(得分:0)

嗯,这是不可能的。你问的是什么  调用两个构造函数来创建一个对象。
这没有任何意义。 (请再次阅读上述内容)。

你总是可以在spring上下文中放置同一个类的多个对象,在每种情况下调用不同的构造函数。

<?xml version="1.0" encoding="UTF-8"?>
<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.2.xsd">

     <bean id="otherEmployee" class="com.vidvaan.spring.Employee">

            <constructor-arg value="100" index="0" type="int" />
            <constructor-arg value="team lead" index="1"
                type="java.lang.String"     />

        </bean>

    <bean id="employee" class="com.vidvaan.spring.Employee">

        <constructor-arg value="2000" index="0" type="double" />
        <constructor-arg value="team lead" index="1"
            type="java.lang.String"     />

    </bean>
</beans>  

你可以做的是用所有四个参数创建一个构造函数,并为你不想初始化的对象传递null 或者您可以使用包含一些参数的构造函数和其他可以通过Field Injection <property name = ...>

设置的参数