微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从ApplicationContext中删除单例Spring bean?

如何解决如何从ApplicationContext中删除单例Spring bean?

你可以尝试删除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。

那可能是一个有趣的问题,您能帮我解决吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。