一尘不染

SPring:确保首先初始化特定的bean

spring

我有一个库在运行时设置和配置log4j(没有log4j.properties或log4j.xml)。我已经定义了一个名为MyLoggerFactory的类,并且我希望它是第一个使用spring初始化的bean。我已经看到spring已经提出了一个支持初始化顺序的问题,但是我想知道是否有一种方法可以将bean标记为spring容器初始化的第一个bean?


阅读 745

收藏
2020-04-13

共1个答案

一尘不染

你的选择是:

  • 使用@DependsOn批注(在spring 3.0.x之后可用)或depends-onxml属性,并使使用已配置记录器的所有类均取决于记录器工厂
  • 使工厂成为记录器的实际工厂,并将记录器注入Bean中,而不是直接调用该工厂-这与选项1基本上相同,除了隐含依赖项。这是我推荐的选项。
  • 将初始化代码移至指定了调用顺序的代码部分– main()方法,或ServletContextListener在初始化Spring之前的注册方法。
    没有办法在Spring中明确定义初始化顺序,而且可能永远也不会-考虑到你可以加载许多可能有冲突顺序的应用程序上下文配置文件,因此无法为它定义有用的语义。我还没有看到无法通过重构代码以更好地符合依赖项注入模式来实现所需排序的情况。
2020-04-13