我有一个库进行 log4j 的运行时设置和配置(没有 log4j.properties 或 log4j.xml)。我已经定义了一个名为 MyLoggerFactory 的 bean,我希望它成为第一个使用 spring 初始化的 bean。我看到已经向 spring 提交了一个问题来支持初始化顺序,但我想知道是否有一种方法可以将 bean 标记为 spring 容器初始化的第一个 bean?
您的选择是:
- Use @DependsOn注解(spring 3.0.x之后可用)或depends-onxml-attribute 并使所有使用配置的记录器的类依赖于记录器工厂
- 让工厂成为记录器的实际工厂,并将记录器注入到 Bean 中,而不是直接调用工厂——这本质上与选项 1 相同,只是隐含了依赖关系。这是我推荐的选项。
- 将初始化代码移至代码中指定调用顺序的部分 -
main()
方法,或ServletContextListener
在初始化 Spring 之前注册。
在 Spring 中没有办法显式定义初始化顺序,并且可能永远不会——考虑到您可以加载许多可能具有冲突顺序的应用程序上下文配置文件,没有办法为其定义有用的语义。我还没有看到过通过重构代码以更好地符合依赖项注入模式而无法实现所需排序的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)