java - 如何强制 Spring 容器不返回 bean 的单例实例?

当我在 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/

相关文章:

java - AspectJ 表达式在切入点错误中给出正式的未绑定(bind)

java - 为什么 Spring 的 jdbcTemplate.batchUpdate() 这么慢

java - @ControllerAdvice 在处理异常方面比 @ExceptionHandle

java - 为什么来自 Spring 的 BCryptPasswordEncoder 为相同的输入

spring - 配置多个数据源后无法设置JPA命名策略(Spring 1.4.1/Hibernat

java - 从另一个异步方法调用的 Spring 异步方法

java - 无法将 boolean 值设置为 null

java - 在 Spring Boot 中读取环境变量

java - 比较 SpEL 中的枚举

java - 我无法使用断点进行调试