如何重新初始化一个 Spring Bean?
How to reinitialize a Spring Bean?
是否可以在运行时重新初始化 Spring Bean?
我的 Bean 使用静态设置,在某些情况下会发生变化,然后我必须重新初始化 bean。
在 spring 上下文中更新单例 bean 有三个选项,您可以选择一个适合您的用例:
Bean中的Reload方法
在您的 bean 中创建一个方法,该方法将 update/reload 它的属性。根据您的触发器,从 spring 上下文访问 bean,然后调用 reload 方法来更新 bean 属性(自单例以来)它也将在 spring 上下文中以及它所在的任何地方更新 autowired/injected.
在注册表中删除并注册 Bean
您可以使用 DefaultSingletonBeanRegistry
删除并重新注册您的 bean。唯一的缺点是,它不会在消费者 类.
中 refresh/reload 已经 autowired/injected bean 的旧实例
DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
@RefreshScope
对于从配置更改中刷新 bean 值属性很有用。但它的用途非常有限且特定。 Resource 了解更多信息。
是否可以在运行时重新初始化 Spring Bean?
我的 Bean 使用静态设置,在某些情况下会发生变化,然后我必须重新初始化 bean。
在 spring 上下文中更新单例 bean 有三个选项,您可以选择一个适合您的用例:
Bean中的Reload方法
在您的 bean 中创建一个方法,该方法将 update/reload 它的属性。根据您的触发器,从 spring 上下文访问 bean,然后调用 reload 方法来更新 bean 属性(自单例以来)它也将在 spring 上下文中以及它所在的任何地方更新 autowired/injected.
在注册表中删除并注册 Bean
您可以使用 DefaultSingletonBeanRegistry
删除并重新注册您的 bean。唯一的缺点是,它不会在消费者 类.
DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
@RefreshScope
对于从配置更改中刷新 bean 值属性很有用。但它的用途非常有限且特定。 Resource 了解更多信息。