Spring Bean初始化顺序

时间:2010-07-06 15:52:18

标签: java spring

我有多个上下文文件。要求是:一个特定的Bean(进行一些配置更改)首先在其余bean中初始化。

有没有办法先装入这个bean?

一个选项是使用depends-on`属性。但这需要更新所有剩余的bean,因此似乎不是最佳解决方案。

我们有更好的选择吗?

4 个答案:

答案 0 :(得分:14)

恕我直言,你应该等到他们修复https://jira.spring.io/browse/SPR-3948

  

一种可能的方法是使用依赖属性。但同样,我不想在所有剩余的bean中添加此属性(这可能是我的最后选择)。

实际上,您不需要在每个applicationContext.xml中对每个和每个BEAN使用依赖。

在所有“lower-lvel”applicationContext.xml中使用<import />来导入最顶层的applicationContext.xml。

并且只在最顶层的applicationContext.xml中使用每个bean定义中的depends-on属性,除了你想首先加载的<bean />

答案 1 :(得分:1)

对于需要bean的排序是有意义的,通常是在业务bean之前加载技术bean(例如添加MBean)(就像在http://jira.springframework.org/browse/SPR-3948中提出的那样)

使用BeanPostProcessor是另一种在bean中提供一些排序的方法。检查AbstractApplicationContext.refresh()以查看它是如何实施的。

答案 2 :(得分:1)

我设法用@Order注释我的bean来影响bean启动顺序:见http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/annotation/Order.html

答案 3 :(得分:-3)

我不是春天的专家,很可能被某个人大喊大叫。但在那之前......

如果存在歧义的空间,我猜测Spring会按照配置文件中遇到的顺序加载/应用内容。因此,作为第一个也是最简单的近似,我会尝试确保首先初始化的东西是配置文件中的第一个东西。

如果它是全部分层的,那么你会希望你的“第一”配置要么在调用其他文件之前在“主”文件中,要么在第一个被调用的文件中可能。