0

在我的 Spring-Module.xml 中有两个 bean:

<bean id="two_num" class="main.java.com.shen.Generator">
    <property name="length" value="8" />
    <property name="categories" value="3" />
    ...
</bean>
<bean id="six_num" class="main.java.com.shen.Generator">
    <property name="length" value="6" />
    <property name="categories" value="1" />
    <property name="numeric" value="numeric" />
    ...
</bean>

我像这样实例化我的类:

ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");
    Generator obj = (Generator) context.getBean("two_num");

由于某些原因,尽管我明确表示我想要 bean“two_num”,但 java 总是实例化我的第二个 bean。如果我要颠倒顺序,并且在“two_num”之上有“six_num”的bean,它将得到底部的bean。:| 这是怎么回事?我很混乱。我选择特定 bean 的方法是错误的吗?

编辑:再添加一个 bean 后,这是我运行程序时得到的:

信息:在 org.springframework.beans.factory.support.DefaultListableBeanFactory@e949f69 中预实例化单例:定义 bean [two_num,six_num,four_num];工厂层次结构的根

正如预期的那样,当我在我的类中调用 print 方法时,我可以看到当前对象是用four_num中指定的信息实例化的,而不是“two_num”

4

2 回答 2

2

正如已经建议的那样,当然要删除字段上的静态修饰符。此外,如果您想“单身”修改您的 XML:

<bean id="two_num" class="main.java.com.shen.Generator" scope="singleton">
  <property name="length" value="8" />
  <property name="categories" value="3" />
  ...
</bean>

所以你只会得到每个 bean 的一个实例。您仍然会获得多个 Generator 实例,但每个 bean 只有一个。

于 2013-07-16T14:07:34.673 回答
1

根据评论,我只能假设 Generator 类看起来像这样

public class Generator {
  private static length;
  private static categories;

  //getters/setters
}

鉴于我没有一个完整的类可以使用,我只能建议删除 static 修饰符,因为它会与您想要使用该类的方式相矛盾。

于 2013-07-16T14:04:29.710 回答