问题描述
你可以尝试删除Bean定义。取得BeanDeFinitionRegistry
并致电removeDeFinition(..)
这取决于创建应用程序的方式,但是例如在Web应用程序中,可以通过以下方式获取定义注册表:
BeanDeFinitionRegistry factory =
(BeanDeFinitionRegistry) applicationCtx.getAutowireCapablebeanfactory();
(bean工厂实现BeanDeFinitionRegistry
)。
我不知道bean实例是否也会被删除。试试看。
删除定义既可以做到:删除定义又销毁(删除该bean上的所有容器引用)对应的Singleton:
((BeanDeFinitionRegistry) beanfactory).removeBeanDeFinition("myBean");
如果只需要删除单例,则:
((DefaultListablebeanfactory) beanfactory).destroySingleton("myBean");
如果你只注册了singleton但未定义任何bean定义,则后一种方法可能特别有用,即
((SingletonBeanRegistry) beanfactory).registerSingleton("myBean", myBeanInstance);
解决方法
我想开发一个模块控制系统,以便每个Spring bean都可以由我自己的LifeCycle Controller进行管理。
但是我不知道如何从ApplicationContext中删除单例spring bean。
那可能是一个有趣的问题,您能帮我解决吗?