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不允许部分刷新上下文,并且替换父上下文听起来像是在尝试这种操作。

也许,如果您通过一些示例更详细地说明您的问题,则可以通过建设性的建议来回答您的问题。

10-08 17:32