将自定义 ApplicationContextInitializer 添加到 Spring Web 应用程序的一种方法是将其添加到 web.xml 文件中,如下所示。
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>somepackage.CustomApplicationContextInitializer</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
但是由于我使用的是 Spring Boot,有什么方法我不必创建 web.xml 只是为了添加 CustomApplicationContextInitializer?
您可以在
META-INF/spring.factories
注册它们
org.springframework.context.ApplicationContextInitializer=\
com.example.YourInitializer
您也可以在运行之前将它们添加到您的
SpringApplication
application.addInitializers(YourInitializer.class);
application.run(args);
或者在构建器上
new SpringApplicationBuilder(YourApp.class)
.initializers(YourInitializer.class);
.run(args);
乍一看文档并不明显,所以我打开 #5091 进行检查。
另一种方法是在properties/yml 文件中使用
context.initializer.classes=com.example.YourInitializer
。我喜欢这种方法,因为这样您就可以通过环境特定的 props 文件启用/禁用初始化程序。
中简要提及
另一种选择是在类级别使用 @ContextConfiguration 注释,如下所示:
@ContextConfiguration(initializers = [TestContainersInitializer::class])
这种方法对于将此初始值设定项添加到测试类很有用,例如在执行测试之前启动 docker 容器。