自定义ApplicationContextInitializer
自定义的ApplicationContextInitializer
在Spring Boot应用启动时注入自定义属性,通常用于需要对应用程序上下文进行编程初始化的web应用程序中
前置Maven配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.4</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
1. myApplicationContextInitializer
类:
public class myApplicationContextInitializer implements ApplicationContextInitializer {
//Ioc容器对象创建完毕后执行
//在 Spring 应用程序上下文(ApplicationContext)被创建后
//但初始化之前执行自定义的初始化操作
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
//1.准备属性
Map<String, Object> myMap = new HashMap<>();
myMap.put("applicationName","big-event");
//2.获取环境对象
//获取的环境对象
ConfigurableEnvironment environment = applicationContext.getEnvironment();
//属性资源管理对象
MutablePropertySources propertySources = environment.getPropertySources();
//3.注册ioc容器
propertySources.addLast(new MapPropertySource("myMap",myMap));
}
}
- myApplicationContextInitializer实现了ApplicationContextInitializer接口,这意味着当Spring Boot应用启动时,这个类的initialize方法会被调用,允许在Spring容器初始化完成后进行额外的配置。
- 在
initialize()
方法中,先创建了一个HashMap
,添加了一个自定义属性applicationName
,然后创建了一个MapPropertySource
,将"applicationName
"的值设置为"big-event",并将其添加到环境属性源(MutablePropertySources
)的末尾。 - 目的:在应用启动时注入额外的配置,这些配置可以在应用的其他地方被访问,比如在
Main
类中通过context.getEnvironment().getProperty("applicationName")
获取。
2.SpringBoot的SPI扩展—META-INF/spring.factories
中配置
org.springframework.context.ApplicationContextInitializer = com.spring.initializer.myApplicationContextInitializer
spring.factories文件的本质是一个属性(Properties)文件格式的配置文件。这种格式基于纯文本,以键值对的形式存在
3. Main
类:
@SpringBootApplication
public class Main {
public static void main(String[] args) {
//TODO:1.自定义初始化器
//定义成上下文对象
ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);
//通过上下文对象context的键,获取环境对象的值
String applicationName = context.getEnvironment().getProperty("applicationName");
System.out.println("applicationName = " + applicationName);
}
}
当Spring Boot应用启动时,它会扫描META-INF
/spring.factories
文件,查找所有声明的初始化器。找到的初始化器按顺序执行,允许开发者在Spring Boot的默认配置之外进行定制。
这样ApplicationName就配置成功了