概述
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复