Порядок инициализации бобов весны - PullRequest
33 голосов
/ 06 июля 2010

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

Есть ли способ загрузить этот бин первым?

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

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

Ответы [ 4 ]

14 голосов
/ 07 июля 2010

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

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

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

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

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

1 голос
/ 22 декабря 2014

Мне удалось повлиять на порядок запуска бина, пометив мой бин @Order: см. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/annotation/Order.html

1 голос
/ 28 февраля 2014

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

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

0 голосов
/ 06 июля 2010

Я не эксперт по Весне, и, вероятно, меня кто-то кричит.Но до тех пор ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...