Подтвердить что ты не робот

Spring 3 bean последовательность экземпляров

Можно ли указать порядок, в котором beans должен быть создан? то есть я хочу, чтобы конкретный beans был создан для других beans, как и последовательность запуска.

Я использую Spring 3.2 и метод объявления на основе аннотаций.

4b9b3361

Ответ 1

Если bean A зависит от bean B, определяя <property/>, @Autowired или <constructor-arg/>, тогда порядок принудительно и фиксируется контейнером Spring. Здесь нет проблем.

Но если вы хотите применить определенный порядок создания bean, который не выражается через явные зависимости, не стесняйтесь использовать:

<bean id="A" depends-on="B"/>
<bean id="B"/>

или лучше (с аннотациями, работает также с конфигурацией Java @Bean):

@Service
@DependsOn("B")
public class A {}

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

Ответ 2

Согласился с ответом Томаша. Если вы знаете, что bean A зависит от bean B, это правильный подход.

Иногда у вас есть логика, которая должна выполняться перед всеми экземплярами beans. В этом случае вы можете использовать BeanFactoryPostProcessor. Spring сначала создает и выполняет BeanFactoryPostProcessors, а затем только остальные beans. В то же время, если ваш BeanFactoryPostProcessor зависит от некоторого bean A, вы можете использовать инъекцию свойства или конструктора. В этом случае Spring сначала создаст bean A, а затем ваш BeanFactoryPostProcessor, вызовет BeanFactoryPostProcessor и после этого только установит все остальные beans в контексте.

Ответ 3

Вы можете использовать упорядоченный интерфейс на bean, чтобы определить порядок относительно других beans.