Java Bean实例化错误的bean

时间:2013-07-16 13:44:07

标签: java spring javabeans

在我的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");

由于某些原因,java总是实例化我的第二个bean,尽管我明确地说我想要bean“two_num”。如果我要翻转顺序,并将“six_num”的bean放在“two_num”之上,它将获得底部bean。 :|这是怎么回事?我很困惑。我选择特定bean的方法是错误的吗?

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

  
    
      

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

    
  

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

2 个答案:

答案 0 :(得分: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只有一个实例。

答案 1 :(得分:1)

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

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

  //getters/setters
}

鉴于我没有完整的类可以使用,我只能建议删除静态修饰符,因为它会违反你想要使用类的方式。