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