嗨,我是 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/