当前位置: 首页 > news >正文

Spring Boot(五十四):SpringBoot事件监听机制

1 Java监听机制

SpringBoot 的监听机制,其实是对Java提供的事件监听机制的封装。

Java中的事件监听机制定义了以下几个角色:

  1. 事件:Event,继承 java.util.EventObject 类的对象
  2. 事件源:Source ,任意对象Object
  3. 监听器:Listener,实现 java.util.EventListener 接口的对象

2 SpringBoot监听机制

SpringBoot 在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作。ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner

新建springboot项目,目录结构如下: 

ApplicationContextInitializer

package com.example.demo.listener;

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationContextInitializer implements ApplicationContextInitializer {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("ApplicationContextInitializer....initialize");
    }
}

SpringApplicationRunListener

package com.example.demo.listener;

import org.springframework.boot.ConfigurableBootstrapContext;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.stereotype.Component;

import java.time.Duration;

public class MySpringApplicationRunListener implements SpringApplicationRunListener {

    public MySpringApplicationRunListener(SpringApplication application, String[] args) {
    }

    @Override
    public void starting(ConfigurableBootstrapContext bootstrapContext) {
        System.out.println("starting...项目启动中");
    }

    @Override
    public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {
        System.out.println("environmentPrepared...环境对象开始准备");
    }

    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("contextPrepared...上下文对象开始准备");
    }

    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("contextLoaded...上下文对象开始加载");
    }

    @Override
    public void started(ConfigurableApplicationContext context, Duration timeTaken) {
        System.out.println("started...上下文对象加载完成");
    }

    @Override
    public void running(ConfigurableApplicationContext context) {
        System.out.println("running...项目启动完成,开始运行");
    }

    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        System.out.println("failed...项目启动失败");
    }
}

CommandLineRunner

package com.example.demo.listener;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner...run");
        System.out.println(Arrays.asList(args));
    }
}

ApplicationRunner

package com.example.demo.listener;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner...run");
        System.out.println(Arrays.asList(args.getSourceArgs()));
    }
}

其中CommandLineRunner和ApplicationRunner的实现不需要配置文件里配置东西

 

 要想输出的内容不为[]可以在Edit Configurations...配置:

 

要想ApplicationContextInitializer和SpringApplicationRunListener可以实现,必须在resources目录下的META-INF文件夹下的配置spring.factories(名字必须一致,这样spring才能扫描到):

 

#所继承类的全类名=实现类的全类名
org.springframework.context.ApplicationContextInitializer=com.example.demo.listener.MyApplicationContextInitializer
org.springframework.boot.SpringApplicationRunListener=com.example.demo.listener.MySpringApplicationRunListener

 

相关文章:

  • Fastdfs分布式文件系统原理浅析
  • 3-2存储系统-主存与CPU的连接外部存储器
  • 20230116英语学习
  • 质量体系搭建
  • PAT2.7 弹球距离
  • 华为机试题:HJ13 句子逆序(python)
  • spring学习系列
  • Pytorch模型自定义数据集训练流程
  • 云原生技术学习笔记(基础版)
  • nohup + 命令实现后台不挂断地运行程序
  • 贪心算法专题
  • Android项目Gadle统一依赖管理
  • 水声功率放大器模块在圆柱壳结构声源辐射研究中的应用
  • uefi和legacy的区别对比
  • windows安装VMware最新版本(VMware Workstation 17.0 Pro)详细教程
  • 亚马逊云科技助力游戏上云学习心得-运行篇
  • LeetCode 334. 递增的三元子序列(C++)
  • VTK-vtkSelectPolyDataFilter
  • CSS选择器整理学习(上)
  • 我收集的PDF电子书