如何重新初始化Spring Bean?

Fip*_*Fip 8 java spring spring-bean spring-boot

是否可以在运行时重新初始化Spring Bean?

我的Bean使用静态设置,在某些情况下会更改,然后我必须重新初始化Bean。

Ami*_*mar 9

您可以通过三种方法在春季上下文中更新单例bean,可以选择一种适合您的用例:

在Bean中重新加载方法在Bean中
创建一个方法,该方法将更新/重新加载其属性。根据您的触发器,从spring上下文访问bean,然后调用reload方法更新bean属性(自单例以来),它也将在spring上下文中以及在自动装配/注入的任何地方进行更新。

在注册表中删除并注册Bean
您可以DefaultSingletonBeanRegistry用来删除并重新注册Bean。这样做的唯一缺点是,它不会刷新/重新加载使用者类中已经自动装配/插入的Bean的旧实例。

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
Run Code Online (Sandbox Code Playgroud)

@RefreshScope
用于刷新配置更改中的bean值属性。但是它具有非常有限的特定目的。参考资料,以了解更多信息。

  • 因为它只会从上下文中获取已经加载的 bean,而不是刷新/重新加载它。我不明白你说的这么难? (2认同)
  • 在我的情况下,新 bean 在`applicationContext.getBean(Bean.class)` 上返回。这是因为`@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)`。 (2认同)
  • 是的,这个问题不适用于非单例 bean。原型范围是每次使用,因此您的 bean 是针对每个需求创建的,因此不存在重新加载的问题。 (2认同)