可以在运行时重新初始化Spring Bean吗?
我的Bean使用静态设置,在某些情况下会发生变化,然后我需要重新初始化该Bean。
我的Bean使用静态设置,在某些情况下会发生变化,然后我需要重新初始化该Bean。
在Spring上下文中更新单例bean有三种选项,您可以选择适合您用例的一种:
在Bean内部创建重载方法
创建一个方法在您的bean内部,它将更新/重新加载其属性。根据您的触发器,从Spring上下文中访问该bean,然后调用重载方法来更新bean属性(由于是单例),它也将在Spring上下文和任何已自动装配/注入的地方进行更新。
删除并在注册表中重新注册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属性值。但它的作用非常有限且具体化。点击此处了解更多信息。
applicationContext.getBean(Bean.class)
返回的是新的 bean。这是由于 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
。 - Alex78191DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
其中context
对象的类型为ApplicationContext
。
但是我遇到了以下错误:The method getBeanFactory() is undefined for the type ApplicationContext
。
建议改为使用getParentBeanFactory(..)
方法。
非常感谢您的帮助。 - Abhilash