Spring之所以具备如此强大的生态,扩展能力强是很重要的一方面,这得益于它本身提供了非常多的扩展点。本节我们针对Spring生命周期中涉及到的扩展点来看一看,究竟它们是何方神圣?
1 扩展点流程
Spring生命周期的主要扩展点如图:
2 扩展点解析及应用场景
ApplicationContextInitializer接口
用于在执行refresh()
之前初始化ConfigurationApplicationContext
的回调接口。
通常用于需要对应用程序上下文进行编程初始化的web应用程序中。例如,注册属性源或根据上下文环境激活配置文件。 比如:Spring boot就写了几个ApplicationContextInitializer的实现类,常见作用:
ConfigurationWarningsApplicationContextInitializer
:对于一般配置错误在日志中作出警告ContextIdApplicationContextInitializer
:设置ApplicationContext#getId()所获取的ID值,默认取spring.application.name属性值,没有配置时默认为 applicationDelegatingApplicationContextInitializer
:使用环境属性context.initializer.classes指定的初始化器(initializers)进行初始化工作,如果没有指定则什么都不做
......
实现方式如下
public class CustomApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
// 打印当前方法类名和方法名,调试用
CountUtil.println(getClass(),Thread.currentThread().getStackTrace()[2].getMethodName());
}
}
复制代码
在配置文件中设置:
context.initializer.classes=com.zyq.demo.expand.CustomApplicationContextInitializer
复制代码