我有一个场景,我需要在启动期间根据应用程序配置初始化 bean。后来,由于基于事件获取的动态配置,我必须更新 bean。此 bean 无法更新,只能用新实例替换。使用new操作符是只初始化本地实例还是会改变 bean?@Componentpublic class TestComp { @Autowired private BeanA beanA; public void updateBean() { beanA = new BeanA("new value"); }}我在另一个类中引用了 bean 并在使用new. 它反映了新对象。但是,如果确实如此,我需要专家的确认。
2 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
这听起来像你想有一个工厂,而不是。下面是它可能是什么样子的粗略概念;您的需求可能会有所不同。
@Component
public class BeanFactory {
private volatile BeanA beanAInstance;
public BeanA createBeanA(String value) {
if (null == beanAInstance) {
synchronized (this) {
if (null == beanAInstance) {
beanAInstance = new BeanA(value);
}
}
}
return beanAInstance;
}
public void refreshBeanA(String newValue) {
synchronized (this) {
beanAInstance = new BeanA(newValue);
}
}
}
然后将其连接起来,并根据配置,然后可以刷新并使用新值。请记住,这会改变您从此 bean 获得的值。
添加回答
举报
0/150
提交
取消