Заказ Spring Bean Инициализация

У меня есть несколько файлов контекста. Требование: один конкретный Bean (который делает некоторые изменения конфигурации) должен быть инициализирован первым среди остальных beans.

Есть ли способ сначала загрузить этот Bean?

Один параметр использует атрибут depend-on`. Но это потребует обновления всей остальной части beans, поэтому, похоже, это не лучшее решение.

У нас есть лучшие варианты?

Ответ 1

IMHO вам стоит подождать, пока они не исправят https://jira.spring.io/browse/SPR-3948

Одним из возможных способов является использование зависимого атрибута. Но опять же, я не хочу добавлять этот атрибут во все остальное beans (для меня это, вероятно, последнее средство).

На самом деле вам не нужно использовать зависимости от КАЖДОГО И КАЖДОГО BEAN в каждом приложении applicationContext.xml.

Используйте <import /> во всех "нижних уровнях" applicationContext.xml, чтобы импортировать самый верхний applicationContext.xml.

И используйте атрибут зависимости в каждом определении BEAN только в самом верхнем applicationContext.xml, за исключением <bean />, который вы хотите загрузить первым.

Ответ 2

In может иметь смысл требовать упорядочения beans, как правило, для технического beans (например, добавления MBeans) для загрузки перед бизнесом beans (так же, как это предлагается в http://jira.springframework.org/browse/SPR-3948)

Использование BeanPostProcessor - это еще один способ обеспечить некоторый порядок в вашем beans. Проверьте AbstractApplicationContext.refresh(), чтобы узнать, как это выполняется.

Ответ 4

Я не эксперт Spring и, вероятно, буду кричать кем-то, кто есть. Но до тех пор...

Если есть место для двусмысленности, я бы предположил, что Spring загружает/применяет материал в том порядке, в котором он встречает его в файлах конфигурации. Таким образом, в качестве первого и самого простого приближения я попытался бы убедиться, что первое, что вы хотите инициализировать, является одной из первых в ваших файлах конфигурации.

Если все иерархическое, то вы хотите, чтобы ваши "первые" конфигурации либо находились в "основном" файле до того, как другие были вызваны, либо, если возможно, в первом вызываемом файле.