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;
}
我的要求是创建一个 ApplicationContext 链,其中一个 AppContext 引用另一个 AppContext 作为其父级。父系也扩展到 AppContext 的相应 DefaultListableBeanFactory
,即 Context 的 DefaultListableBeanFactory
引用父 Context 的 DefaultListableBeanFactory
作为其父级。
这样做是为了可以从最底部的 AppContext 搜索驻留在链中任何 Context 中的 bean。
这条链是动态的,新的 AppContext 添加在顶部,任何 AppContext 都可以从中间删除。
但是当我从中间删除 AppContext 并尝试更改 DefaultListableBeanFactory
父关系时,它会出现上述异常。
如何在运行时更改工厂的父关系?
谢谢, 问候, 维马尔
最佳答案
我相信父bean工厂是最终设计的,在我看来这是合理的设计选择。将其替换为另一种会导致许多不一致和不可预测的行为。
如果您依赖于从父上下文注入(inject)的 bean,那么替换父上下文会发生什么情况?是否应该重新注入(inject)这种依赖关系?如果是,那么原型(prototype) bean 怎么样,它们没有被跟踪?如果不是,如果父上下文中的 bean 范围发生变化怎么办?
Spring 不允许部分刷新上下文,并且替换父上下文听起来像是此类操作的尝试。
也许如果您通过一些例子更详细地解释您的问题,就可以通过建设性的建议来回答您的问题。
关于Java:spring:为什么Abstract BeanFactory不允许更改父BeanFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884819/