【发布时间】:2018-10-04 22:22:08
【问题描述】:
我有一个场景,我需要在启动期间根据应用程序配置来初始化一个 bean。后来,由于基于事件获取的动态配置,我不得不更新 bean。
此 bean 无法更新,只能用新实例替换。
使用new 运算符是仅初始化本地实例还是会更改 bean?
@Component
public class TestComp {
@Autowired
private BeanA beanA;
public void updateBean() {
beanA = new BeanA("new value");
}
}
我在另一个类中引用了 bean,并在使用 new 对其进行初始化后进行了检查。它反映了新对象。但是,如果确实如此,我需要专家的确认。
【问题讨论】:
-
这会变得非常复杂。在最简单的情况下,假设您需要 Spring 对每个 BeanA 进行依赖注入,则在将
context设置为 ApplicationContext 类型的自动关联实例变量之后,您需要使用它,而不是 new:beanA = context.getBean(BeanA.class)。而且您需要使 BeanA 成为原型范围的 bean - 因此每次调用 getBean() 方法时都会获得一个新的 BeanA。
标签: java spring autowired spring-bean