我想开发一个模块控制系统,这样每个spring bean都可以由我自己的LifeCycle Controller管理。
但我无法弄清楚如何从ApplicationContext中删除单例Spring bean。
这可能是一个有趣的问题,你能帮我解决一下吗?
答案 0 :(得分:35)
删除定义同时执行:删除定义并销毁(删除该bean上的所有容器引用)相应的Singleton:
((BeanDefinitionRegistry) beanFactory).removeBeanDefinition("myBean");
如果你只需要删除单身人士,那么:
((DefaultListableBeanFactory) beanFactory).destroySingleton("myBean");
如果你只是注册单身但没有定义任何bean定义,那么后一种方法可能特别有用,即
((SingletonBeanRegistry) beanFactory).registerSingleton("myBean", myBeanInstance);
答案 1 :(得分:20)
您可以尝试删除bean定义。获取BeanDefinitionRegistry
并致电removeDefinition(..)
这取决于您创建应用程序的方式,但是例如在Web应用程序中,您可以通过以下方式获取定义注册表:
BeanDefinitionRegistry factory =
(BeanDefinitionRegistry) applicationCtx.getAutowireCapableBeanFactory();
(bean工厂实现BeanDefinitionRegistry
)。
我不知道是否也会删除bean实例。试一试。