spring中ApplicationContextInitializer接口的使用

ApplicationContextInitializer接口有哪些用处呢?

  1. 用于ConfigurableApplicationContext通过调用refresh函数来初始化Spring容器之前的回调函数;

  2. 通常在web应用中,设计在初始化Spring容器之前调用。例如依赖于容器ConfigurableApplicationContext中的Enviroment来记录一些配置信息或者使一些配置文件生效;

  3. 参考ContextLoader和FrameworkServlet中支持定义contextInitializerClasses作为context-param或定义init-param。

  4. 支持Order注解,表示执行顺序,越小越早执行.

Spring中自带的实现ApplicationContextInitializer接口的初始化器

  1. ContextIdApplicationContextInitializer
    ContextIdApplicationContextInitializer,上下文id初始化器。该初始化器的核心作用是给上下文起个名,一般为application,可以通过spring.application.name配置来进行修改。

  2. DelegatingApplicationContextInitializer
    DelegatingApplicationContextInitializer,委托应用上下文初始化器。该初始化器的能力和委托应用监听器是一样的,它使得我们可以通过配置文件的context.initializer.classes来配置初始化器,而不必使用spring.factories。

  3. ServerPortInfoApplicationContextInitializer

ServerPortInfoApplicationContextInitializer,服务端口信息初始化器,该初始化器同时也是一个监听器。在ServerPortInfoApplicationContextInitializer中,在初始化时,将自己放到了应用的监听器列表中。

此后,ServerPortInfoApplicationContextInitializer会监听web服务初始化事件,该事件发生时,会将服务的端口号这到环境的属性源中。

参考资料:

  1. Spring中,Bean定义加载器的核心功能
  2. ApplicationContextInitializer使用以及加载的原理

  3. SpringBoot之ApplicationContextInitializer的理解和使用

欢迎关注我的公众号:沉迷Spring
显示 Gitment 评论
0%