是否可以在运行时重新初始化SpringBean?我的Bean使用静态设置,在某些情况下会发生变化,然后我必须重新初始化bean。
d5vmydt91#
在Spring上下文中,您有三个选项来更新单例bean,您可以选择一个适合您的用例:
重新装入Bean中的方法
在你的bean中创建一个方法来更新/重载它的属性。基于你的触发器,从spring上下文访问bean,然后调用reload方法来更新bean属性(因为是单例的)它也会在spring上下文中更新&无论它在哪里被自动连接/注入。
在注册表中删除并注册Bean
你可以使用DefaultSingletonBeanRegistry来移除和重新注册bean,唯一的缺点是,它不会刷新/重新加载消费者类中已经自动连接/注入的bean的旧示例。
DefaultSingletonBeanRegistry
DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory(); registry.destroySingleton({yourbean}) //destroys the bean object registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache
@刷新范围
用于从配置更改中刷新bean值属性。但它有非常有限的特定用途。Resource阅读更多关于它的信息。
1条答案
按热度按时间d5vmydt91#
在Spring上下文中,您有三个选项来更新单例bean,您可以选择一个适合您的用例:
重新装入Bean中的方法
在你的bean中创建一个方法来更新/重载它的属性。基于你的触发器,从spring上下文访问bean,然后调用reload方法来更新bean属性(因为是单例的)它也会在spring上下文中更新&无论它在哪里被自动连接/注入。
在注册表中删除并注册Bean
你可以使用
DefaultSingletonBeanRegistry
来移除和重新注册bean,唯一的缺点是,它不会刷新/重新加载消费者类中已经自动连接/注入的bean的旧示例。@刷新范围
用于从配置更改中刷新bean值属性。但它有非常有限的特定用途。Resource阅读更多关于它的信息。