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的排序。