java - 如何在spring中向各种构造函数注入(inject)值

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

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

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进行注入(inject),注入(inject)的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>

最佳答案

嗯,这是不可能的。你问的是
调用两个构造函数来创建一个对象。
这没有任何意义。 (只需再次阅读上面的行即可)。

您始终可以在 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
或者您可以有一个带有一些参数的构造函数,其他参数可以通过字段注入(inject)设置 <property name = ...>

关于java - 如何在spring中向各种构造函数注入(inject)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48222302/

相关文章:

java - 将 Spring MVC 与 CockroachDB 结合使用

Java,多线程类,配置,避免同步

c# - 通用接口(interface)依赖注入(inject)到工厂

java - Java中具有全局变量的递归调用

java - 为什么这个方法不执行这段代码中的其他方法?

Java 套接字服务器和 MySQL

java - 为什么需要转换 Java 泛型方法参数类

java - 如何配置 spring-boot 项目与内存空间数据库一起进行测试?

java - 无法通过 BufferedReader 读取文本文件

dependency-injection - casperjs:如何在单元测试期间在测试本身中包含其他 javascript 文件?