【Spring Boot】自定义ApplicationContextInitializer

自定义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就配置成功了

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值