class AbstractBeanFactory
public void setParentBeanFactory(BeanFactory parentBeanFactory) {
if (this.parentBeanFactory != null && this.parentBeanFactory != parentBeanFactory) {
throw new IllegalStateException("Already associated with parent BeanFactory: " + this.parentBeanFactory);
}
this.parentBeanFactory = parentBeanFactory;
}
我的要求是制作一个ApplicationContexts链,其中一个AppContext引用另一个作为其父级。父项也扩展到AppContext的相应
DefaultListableBeanFactory
,即Context的DefaultListableBeanFactory
将父Context的DefaultListableBeanFactory
称为其父项。这样做是为了可以从最底部的AppContext搜索位于链中任何Context中的bean。
该链是动态的,在顶部添加了新的AppContext,可以从中间删除任何AppContext。
但是,当我从中间删除一个AppContext并尝试更改
DefaultListableBeanFactory
父关系时,它给出了以上异常。如何在运行时更改工厂的父关系?
谢谢,
问候,
重要的
最佳答案
我相信上级bean工厂是最终设计的,我认为这是合理的设计选择。用另一个替换它会导致许多不一致和不可预测的行为。
如果您依赖从父上下文注入的bean,那么替换父上下文应该怎么办?应该重新注入这种依赖性吗?如果是的话,那么原型豆如何处理,将不会被跟踪?如果不是,如果父上下文的bean范围发生变化怎么办?
Spring不允许部分刷新上下文,并且替换父上下文听起来像是在尝试这种操作。
也许,如果您通过一些示例更详细地说明您的问题,则可以通过建设性的建议来回答您的问题。