当我在 BeanFactory
上调用 getBean(name)
时,我会返回应用程序上下文中定义的 bean 实例。但是,当我再次调用 getBean(name)
(使用相同的名称)时,我得到了相同的 bean 实例。我知道在某些(很多?)情况下这是多么可取,但是我如何告诉 BeanFactory
给我一个新实例?
Spring 配置示例(简而言之……我省略了一些冗长的内容,但这应该能说明问题):
<beans>
<bean id="beanA" class="misc.BeanClass"/>
</beans>
Java 示例:
for(int i = 0;i++;i<=1) {
ApplicationContext context = ClassPathXmlApplicationContext("context.xml");
Object o = context.getBean("beanA");
System.out.println(o.toString()); // Note: misc.BeanA does not implement
// toString(), so this will display the OOID
// so that we can tell if it's the same
// instance
}
当我运行它时,我会得到类似的东西:
misc.BeanClass@139894
misc.BeanClass@139894
请注意,两者都有相同的 OOID...所以这些是相同的实例...但我想要不同的实例。
最佳答案
你需要告诉 spring 你想要一个原型(prototype) bean 而不是单例 bean
<bean id="beanA" class="misc.BeanClass" scope="prototype"/>
这将为您的每个请求提供一个新实例。
https://stackoverflow.com/questions/444623/