我是靠谱客的博主 激昂小虾米,最近开发中收集的这篇文章主要介绍ApplicationContextInitializer 和EnvironmentPostProcessor,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

EnvironmentPostProcessor

SpringBoot支持动态的读取文件,留下的扩展接口org.springframework.boot.env.EnvironmentPostProcessor。这个接口是spring包下的,使用这个进行配置文件的集中管理,而不需要每个项目都去配置配置文件。这种方法也是springboot框架留下的一个扩展(可以自己去扩展)



       允许定制应用的上下文的应用环境优于应用的上下文之前被刷新。(意思就是在spring上下文构建之前可以设置一些系统配置)

EnvironmentPostProcessor的实现类必须要在META-INF/spring.factories文件中去注册,并且注册的是全类名。

鼓励EnvironmentPostProcessor处理器检测Org.springframework.core.Ordered注解,这样相应的实例也会按照@Order注解的顺序去被调用。

参考:

https://www.jianshu.com/p/be6c818fe6ff

 

ApplicationContextInitializer<C extends ConfigurableApplicationContext>

 

用于在spring容器刷新之前初始化Spring ConfigurableApplicationContext的回调接口。(剪短说就是在容器刷新之前调用该类的 initialize 方法。并将 ConfigurableApplicationContext 类的实例传递给该方法)

通常用于需要对应用程序上下文进行编程初始化的web应用程序中。例如,根据上下文环境注册属性源或激活配置文件等。

可排序的(实现Ordered接口,或者添加@Order注解)

参考:https://www.cnblogs.com/hello-shf/p/10987360.html

 

  两者比较:

ApplicationContextInitializer 和EnvironmentPostProcessor

两者都是在refresh spring的上下文之前调用,是spring boot预留的扩展接口,需要在必须要在META-INF/spring.factories文件中去注册,并且注册的是全类名。

两者的调用顺序是,先调用EnvironmentPostProcessor 的实现类,在去调用ApplicationContextInitializer的实现类。

 

实例:

像apollo在client中就有一个类实现了上面的两个接口,在META-INF/spring.factories文件内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

com.ctrip.framework.apollo.spring.boot.ApolloAutoConfiguration

org.springframework.context.ApplicationContextInitializer=

com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer

org.springframework.boot.env.EnvironmentPostProcessor=

com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer

从而在调用spring的refresh方法前,把apollo的各个参数加载到环境变量中去。

最后

以上就是激昂小虾米为你收集整理的ApplicationContextInitializer 和EnvironmentPostProcessor的全部内容,希望文章能够帮你解决ApplicationContextInitializer 和EnvironmentPostProcessor所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部