Spring 3 bean实例化序列

反正有没有指定实例化bean的顺序? 即我希望特定的bean在其他bean之前实例化,就像启动序列一样。

我使用的是Spring 3.2和基于注释的声明方法。

如果bean A通过定义 ,@ @Autowired依赖于bean B ,则Spring容器强制并修复该命令。 这里没问题。

但是,如果您想强制执行特定的bean创建顺序,而不是通过显式依赖关系表达,请随意使用:

   

或更好(带注释,也适用于@Bean Java配置):

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

甚至更好……不要使用它。 这些构造是一种代码气味,并且经常暗示您的组件之间存在一些令人讨厌的不可见依赖关系。

同意Tomasz提供的答案。 如果你知道bean A依赖于bean B那么这是正确的方法。

有时你有逻辑应该在所有bean实例化之前执行。 在这种情况下,您可以使用BeanFactoryPostProcessor 。 Spring首先创建并执行BeanFactoryPostProcessors,然后只创建并执行所有其他bean。 同时,如果BeanFactoryPostProcessor依赖于某些bean A,则可以使用属性或构造函数注入。 在这种情况下,Spring将首先创建bean A,然后创建BeanFactoryPostProcessor,调用BeanFactoryPostProcessor,然后仅在上下文中实例化所有其他bean。

您可以使用bean上的Ordered接口来定义相对于其他bean的排序。