【问题标题】:Get bean with specific Arguments to constructor in Spring在Spring中获取具有特定参数的bean到构造函数
【发布时间】:2015-07-02 08:59:50
【问题描述】:

假设我有这门课

public Student{
 private String name;
 private Address address;

 public Student(String fName, Address address){
  name = fname;
  this.address = address;
}

我在 Spring 配置中将这个类定义为

 <bean name="studentInstance" class="StackOverFlow.Student"/>

现在我想使用带有参数的 getBean,我将传递给构造函数。 等于Student s = new Student(name,address) 我知道 Spring 提供了一个方法 getBean(class_name,parms....) 但是我不知道应该如何配置 Spring.xml 配置文件。 我想避免使用 Setter 和 getter 来填充新 bean。

我找到了很多关于如何在 xml 中定义 &lt;/constructor-arg&gt; 的示例,但每次都是使用默认值。在这里,我让用户为每个对象输入不同的值。 我想用 ApplicationContext context = new ClassPathXmlApplicationContext(Spring.xml file path); Student s= (Student)context.getBean("studentInstance",name,address);

我只需要有关配置文件的帮助

提前致谢!

我已经检查了这些链接: Link1Link2Link3Link4

~~~~~编辑~~~~~~~

解决了!这里不需要构造函数注入 我刚刚将原型作用域添加到我的 bean 中,如下所示。

<bean name="carInstance" class="MainApp.bl.GasStation.Car" scope="prototype"/>

【问题讨论】:

  • 旁注,Spring 默认创建一个 bean 的 Singleton。如果您需要更多实例,首先您必须将您的 bean 声明为原型。
  • 哇!!我刚刚将 scope="prototype" 添加到我的 bean 中,一切都像魔术一样工作!!!为什么在任何地方都没有提到或显示它! tnx 兄弟!
  • 如果这对您有帮助,您可以点击灰色复选标记接受答案:)

标签: java spring constructor-injection


【解决方案1】:

首先,这样的 bean 显然必须声明为原型。

Prototype 将单个 bean 定义限定为具有任意数量的对象实例。如果范围设置为原型,则每次对特定 bean 发出请求时,Spring IoC 容器都会创建对象的新 bean 实例

Object getBean(String name, Object... args)throws BeansException

返回指定 bean 的一个实例,该实例可以是共享的,也可以是独立的。 允许指定显式构造函数参数/工厂方法参数,覆盖 bean 定义中指定的默认参数(如果有)。

配置参考以下问题:

Spring <constructor-arg> element must specify a ref or value

请注意,您必须将原语包装到其 Wrapper 对象中以避免在创建对象时具有预定义的值。

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2011-11-07
    • 2015-11-22
    • 2012-02-05
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多