Как я могу удалить singleton spring bean из ApplicationContext?
Я хочу разработать систему управления модулем, чтобы каждый spring bean мог управлять моим собственным контроллером LifeCycle.
Но я не могу понять, как удалить одноэлемент spring bean из ApplicationContext.
Это может быть интересной проблемой, вы можете помочь мне решить?
Ответы
Ответ 1
Вы можете попробовать удалить определение bean. Получите BeanDefinitionRegistry
и вызовите removeDefinition(..)
Это зависит от способа создания приложения, но, например, в веб-приложении вы можете получить реестр определения:
BeanDefinitionRegistry factory =
(BeanDefinitionRegistry) applicationCtx.getAutowireCapableBeanFactory();
(bean factory реализует BeanDefinitionRegistry
).
Я не знаю, удалит ли экземпляр bean. Попробуйте.
Ответ 2
Удаление определения делает так: удаление определения и уничтожение (удаление всех ссылок на контейнеры на этом bean), соответствующее Singleton:
((BeanDefinitionRegistry) beanFactory).removeBeanDefinition("myBean");
Если вам просто нужно удалить синглтон, то:
((DefaultListableBeanFactory) beanFactory).destroySingleton("myBean");
Последний способ может быть особенно полезен, если вы только что зарегистрировали singleton, но не определили определения bean, т.е.
((SingletonBeanRegistry) beanFactory).registerSingleton("myBean", myBeanInstance);