How to reinitialize a Spring Bean?

大憨熊 提交于 2019-11-26 17:06:55

问题


Is it possible to reinitialize a Spring Bean on runtime?

My Bean uses static settings which in some cases changes and then i have to reinitialize the bean.


回答1:


You have three options to update singleton bean in spring context, you can chose one suitable for your use case:

Reload method In the Bean
Create a method in your bean which will update/reload its properties. Based on your trigger, access the bean from spring context, and then call the reload method to update bean properties (since singleton) it will also be updated in spring context & everywhere it is autowired/injected.

Delete & Register Bean in Registry
You can use DefaultSingletonBeanRegistry to remove & re-register your bean. The only drawback to this, it will not refresh/reload old instance of already autowired/injected bean in consumer classes.

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

@RefreshScope
Useful for refreshing bean value properties from config changes. But it has very limited & specific purpose. Resource to read more about it.



来源:https://stackoverflow.com/questions/51218086/how-to-reinitialize-a-spring-bean

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!