Как удалить одноэлементный 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);