Java: весна: почему AbstractBeanFactory не позволяет изменить родительский BeanFactory? - PullRequest
0 голосов
/ 27 марта 2012
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 ссылается на другой в качестве своего родителя. Происхождение также распространяется на соответствующий DefaultListableBeanFactory AppContext, то есть DefaultListableBeanFactory контекста ссылается на родительский контекст DefaultListableBeanFactory в качестве его родителя. Это делается для того, чтобы компонент, находящийся в любом контексте в цепочке, можно было искать из самого нижнего AppContext.

Эта цепочка динамическая, новый AppContext добавляется вверху, любой AppContext может быть удален из середины.

Но когда я удаляю AppContext из середины и пытаюсь изменить родительское отношение DefaultListableBeanFactory, это дает вышеприведенное исключение.

Как я могу изменить родительское отношение фабрик во время выполнения?

Спасибо, С Уважением, Vimal

1 Ответ

1 голос
/ 27 марта 2012

Я считаю, что завод по производству родительских бобов спроектирован как окончательный, и на мой взгляд, это разумный выбор дизайна.Замена его другим приведет ко многим несоответствиям и непредсказуемому поведению.

Если у вас есть зависимость от бина, внедренного из родительского контекста, что произойдет, если вы замените родительский контекст?Должна ли эта зависимость быть повторно введена?Если да, то как насчет бобов-прототипов, они не отслеживаются?Если нет, то что если область действия bean-компонента из родительского контекста изменится?

Spring не разрешает частичное обновление контекста и замена родительского контекста звучит как попытка такой операции.

Возможно, если выобъяснил вашу проблему более подробно, на некоторых примерах можно было бы ответить на ваш вопрос конструктивным предложением.

...