Можно ли указать порядок, в котором beans должен быть создан? то есть я хочу, чтобы конкретный beans был создан для других beans, как и последовательность запуска.
Я использую Spring 3.2 и метод объявления на основе аннотаций.
Ответ 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.