Spring 3 bean实例化序列

gpa*_*gpa 27 java spring

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

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

Tom*_*icz 56

如果bean A通过定义依赖于bean B<property/>,@Autowired或者<constructor-arg/>然后Spring容器强制并修复了该命令.这里没问题.

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

<bean id="A" depends-on="B"/>
<bean id="B"/>
Run Code Online (Sandbox Code Playgroud)

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

@Service
@DependsOn("B")
public class A {}
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

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