问题描述
我有多个上下文文件。 要求是:一个特定的Bean(进行一些配置更改)首先在其余bean中初始化。
有没有办法先装入这个bean?
一种选择是使用depends-on`属性。 但这需要更新所有剩余的bean,因此似乎不是最佳解决方案。
我们有更好的选择吗?
1楼
恕我直言,你应该等到他们修复
一种可能的方法是使用依赖属性。 但同样,我不想在所有剩余的bean中添加此属性(这可能是我的最后手段)。
实际上,您不需要在每个applicationContext.xml中对每个和每个BEAN使用依赖。
在所有“lower-lvel”applicationContext.xml中使用<import />
导入最顶层的applicationContext.xml。
并且只在最顶层的applicationContext.xml中使用依赖属性和每个bean定义中的依赖属性,除了你想首先加载的<bean />
。
2楼
In可能有意义地要求bean的排序,通常用于在业务bean之前加载的技术bean(例如添加MBean)(就像在提出的那样)
使用BeanPostProcessor是另一种在bean中提供一些排序的方法。 检查AbstractApplicationContext.refresh()以查看它是如何强制执行的。
3楼
我设法通过使用@Order
注释我的bean来影响bean启动顺序:请参阅
4楼
我不是春天的专家,很可能被一个人吼叫。 但在那之前......
如果存在歧义的空间,我猜测Spring会按照它在配置文件中遇到的顺序加载/应用东西。 因此,作为第一个也是最简单的近似,我会尝试确保首先初始化的东西是配置文件中的第一个东西。
如果它是全部分层的,那么您将希望您的“第一”配置在调用其他文件之前位于“主”文件中,或者如果可能,则在第一个调用的文件中。