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

标签 java spring inversion-of-control

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/

相关文章:

spring - spring 中的命名空间处理程序

java - Junit 测试单独通过,而不是分组通过

c# - 无法解析从外部 dll 加载的 Controller

java - 是否有推荐的方法让 Spring 2.5+ Autowiring Hibernate 域对象

java - 保存相对于工作目录的文件

java - 为一个类只创建一个对象并重复使用同一个对象

java - Windows 添加/删除程序 : Uninstalling Java 6, 更新 26“ fatal error

java - Apache POI HSSF/XSSF 到 XLS/XLSX 的映射

java - LDAP中超时的实现

dependency-injection - IoC还有多远