前置知识-ApplicationContextInitializer、ApplicationListener

ApplicationContextInitializer

作用:IOC容器对象创建完成后执行,可以对上下文环境做一些操作,例如运行环境属性注册等。

ApplicationContextInitializer如何使用?

1-自定义类,实现ApplicationContextInitializer接口

2-在META-INF/spring.factories配置文件中配置自定义类

initializer方法什么时候执行?

IOC容器对象创建完成后执行,常用语环境属性注册。

代码示例


import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;

import java.util.HashMap;
import java.util.Map;

public class MyApplicationContextInitializer implements ApplicationContextInitializer {
    /**
     * ioc容器对象创建完毕后执行
     */
    
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        //给上下文(context)对象注入环境变量
        //1.准备属性
        Map<String,Object> myMap = new HashMap<>();
        myMap.put("applicationName", "big-event");
        
        //2.获取一个属性资源管理对象
        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        //属性资源管理对象
        MutablePropertySources propertySources = environment.getPropertySources();

        //3.注册
        //addList 最后注册
        //addFirst 最先注册
        propertySources.addLast(new MapPropertySource("myMap",myMap));
    }
}
org.springframework.context.ApplicationContextInitializer=com.example.demo.demos.web.initializer.MyApplicationContextInitializer

 ApplicationListener

作用:监听容器发布的事件,允许程序员执行自己的代码,完成事件驱动开发,它可以监听容器初始化完成、初始化失败等事件。通常情况下可以使用监听器加载资源,开启定时任务等。

 ApplicationListener如何使用(与ApplicationContextInitializer类似

1-自定义类,实现ApplicationListener接口

2-在META-INF/spring.factories配置文件中配置自定义类

 onApplicationEvent什么时候执行?

IOC容器发布事件之后执行,通常用于资源加载,定时任务发布等。

代码示例:

import org.springframework.boot.context.event.ApplicationFailedEvent;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

public class MyListener implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        //ApplicationEvent event 对应的就是发布的时间
        //ApplicationReadyEvent 代表容器初始化成功
        //ApplicationFailedEvent    代表容器初始化失败
        if(event instanceof ApplicationReadyEvent){
            //容器初始化成功
            System.out.println("容器初始化成功");
        }
        if(event instanceof ApplicationFailedEvent){
            //代表容器初始化失败
            System.out.println("代表容器初始化失败");
        }
    }
}
org.springframework.context.ApplicationListener=com.example.demo.demos.web.listener.MyListener

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值