在我的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”
答案 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
}
鉴于我没有完整的类可以使用,我只能建议删除静态修饰符,因为它会违反你想要使用类的方式。