我有多个上下文文件。要求是:一个特定的Bean(进行一些配置更改)首先在其余bean中初始化。
有没有办法先装入这个bean?
一个选项是使用depends-on`属性。但这需要更新所有剩余的bean,因此似乎不是最佳解决方案。
我们有更好的选择吗?
答案 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会按照配置文件中遇到的顺序加载/应用内容。因此,作为第一个也是最简单的近似,我会尝试确保首先初始化的东西是配置文件中的第一个东西。
如果它是全部分层的,那么你会希望你的“第一”配置要么在调用其他文件之前在“主”文件中,要么在第一个被调用的文件中可能。