Java:spring:为什么AbstractBeanFactory不允许更改父BeanFactory?

Java:spring:为什么AbstractBeanFactory不允许更改父BeanFactory?,java,spring,inversion-of-control,Java,Spring,Inversion Of Control,我的要求是创建一个ApplicationContext链,其中一个AppContext引用另一个作为其父级。父级还扩展到AppContext的相应DefaultListableBeanFactory,即上下文的DefaultListableBeanFactory引用父上下文的DefaultListableBeanFactory作为其父级。 这样做是为了可以从最底层的AppContext搜索位于链中任何上下文中的bean 此链是动态的,在顶部添加新的AppContext,可以从中间删除任何AppC

我的要求是创建一个ApplicationContext链,其中一个AppContext引用另一个作为其父级。父级还扩展到AppContext的相应
DefaultListableBeanFactory
,即上下文的
DefaultListableBeanFactory
引用父上下文的
DefaultListableBeanFactory
作为其父级。 这样做是为了可以从最底层的AppContext搜索位于链中任何上下文中的bean

此链是动态的,在顶部添加新的AppContext,可以从中间删除任何AppContext

但是,当我从中间删除AppContext并尝试更改
DefaultListableBeanFactory
父关系时,会出现上述异常

如何在运行时更改工厂的父关系

谢谢, 当做
Vimal

我相信母豆工厂是最终设计的,我认为这是合理的设计选择。用另一个替换它将导致许多不一致和不可预测的行为

若您对从父上下文注入的bean有依赖性,那个么若替换父上下文会发生什么?是否应该重新注入此依赖关系?如果是,那么原型bean呢,它们没有被跟踪?若不是,那个么来自父上下文的bean的范围会发生变化吗

Spring不允许部分刷新上下文,替换父上下文听起来像是在尝试这样的操作


如果您能更详细地解释您的问题,并举出一些例子,或许可以用建设性的建议来回答您的问题。

我已经在另一个问题中解释了这个问题
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;
}