Java 通过传递构造函数参数进行Springbean实例化?
我有下面的春豆Java 通过传递构造函数参数进行Springbean实例化?,java,spring,spring-mvc,spring-3,Java,Spring,Spring Mvc,Spring 3,我有下面的春豆 public class Employee2 { private int id; private String name; private double salary; public Employee2(int id, String name, double salary) { this.id = id; this.name = name; this.salary = salary; } // some logic to ca
public class Employee2 {
private int id;
private String name;
private double salary;
public Employee2(int id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
// some logic to call database using above values
}
现在我在spring配置文件中有以下配置
<bean id="emp2" class="com.basic.Employee2">
<constructor-arg name="id" value="" />
<constructor-arg name="name" value="" />
<constructor-arg name="salary" value="" />
</bean>
现在如何将值传递给Employee2构造函数
谢谢 您可以使用以下方法:
允许指定显式构造函数参数/工厂方法
参数,重写中指定的默认参数(如果有)
bean定义
例如:
Integer param1 = 2;
String param2 = "test";
Double param3 = 3.4;
Employee2 emp =
(Employee2)applicationContext.getBean("emp2", param1, param2, param3);
无论如何,这将是可行的,你应该考虑使用Spring EL,如下面一个评论中所提到的。
如果它们是动态的,但在开始时你应该知道它们,你应该使用<代码> SPEL < /C>(Spring表达式语言)或属性占位符来在启动时对它们进行配置。你说那是单身,所以很可能是你的情况。如果不是这样,您可能不应该将其创建为单例bean。无论如何,我会完全避免使用getBean
方法。您有一个非常棒的基础设施来解耦注入。你为什么还要再把它配对呢?阿维,谢谢你的回复。首先,Employee2bean是单例范围还是原型bean?因为我的bean只包含字段的setter和getter以及调用一些DAO逻辑的方法。在这种情况下,我需要使用原型范围吗?bellabax,感谢提供链接。在我的例子中,我需要原型范围内的bean吗。您确定只需要一个bean实例吗?正如@Avi所写的,我认为您正在寻找一个原型范围,以便每次都能获得一个新的bean实例,Kocko,它能与singleton bean一起工作吗?因为链接说。。。使用静态工厂方法的显式参数创建原型时要使用的参数。在任何其他情况下使用非null args值都是无效的。我认为bean的类型无关紧要。您可以尝试并分享结果。:)事实上,如果它适用于单例,我会感到惊讶…我尝试了..得到了异常..说getBean参数应该只用于原型范围…这不应该令人惊讶。否则它将打破不变性的规则。
Integer param1 = 2;
String param2 = "test";
Double param3 = 3.4;
Employee2 emp =
(Employee2)applicationContext.getBean("emp2", param1, param2, param3);