Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过传递构造函数参数进行Springbean实例化?_Java_Spring_Spring Mvc_Spring 3 - Fatal编程技术网

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);