ApplicationContextInitializer接口有哪些用处呢?
用于ConfigurableApplicationContext通过调用refresh函数来初始化Spring容器之前的回调函数;
通常在web应用中,设计在初始化Spring容器之前调用。例如依赖于容器ConfigurableApplicationContext中的Enviroment来记录一些配置信息或者使一些配置文件生效;
参考ContextLoader和FrameworkServlet中支持定义contextInitializerClasses作为context-param或定义init-param。
支持Order注解,表示执行顺序,越小越早执行.
Spring中自带的实现ApplicationContextInitializer接口的初始化器
ContextIdApplicationContextInitializer
ContextIdApplicationContextInitializer,上下文id初始化器。该初始化器的核心作用是给上下文起个名,一般为application,可以通过spring.application.name配置来进行修改。DelegatingApplicationContextInitializer
DelegatingApplicationContextInitializer,委托应用上下文初始化器。该初始化器的能力和委托应用监听器是一样的,它使得我们可以通过配置文件的context.initializer.classes来配置初始化器,而不必使用spring.factories。ServerPortInfoApplicationContextInitializer
ServerPortInfoApplicationContextInitializer,服务端口信息初始化器,该初始化器同时也是一个监听器。在ServerPortInfoApplicationContextInitializer中,在初始化时,将自己放到了应用的监听器列表中。
此后,ServerPortInfoApplicationContextInitializer会监听web服务初始化事件,该事件发生时,会将服务的端口号这到环境的属性源中。
参考资料: