当前位置: 代码迷 >> java >> Spring Bean初始化顺序
  详细解决方案

Spring Bean初始化顺序

热度:12   发布时间:2023-07-25 19:31:36.0

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

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

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

我们有更好的选择吗?

恕我直言,你应该等到他们修复

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

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

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

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

In可能有意义地要求bean的排序,通常用于在业务bean之前加载的技术bean(例如添加MBean)(就像在提出的那样)

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

我设法通过使用@Order注释我的bean来影响bean启动顺序:请参阅

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

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

如果它是全部分层的,那么您将希望您的“第一”配置在调用其他文件之前位于“主”文件中,或者如果可能,则在第一个调用的文件中。

  相关解决方案