为了账号安全,请及时绑定邮箱和手机立即绑定

重新初始化 spring @Autowire bean

重新初始化 spring @Autowire bean

蝴蝶不菲 2021-10-28 09:23:57
我有一个场景,我需要在启动期间根据应用程序配置初始化 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 获得的值。


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信