当前位置: 首页 > 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

 

相关文章:

  • 网上做娱乐广告的网站/百度加盟
  • bluehost配置wordpress/优化防疫措施
  • 静态网站开发语言有哪些/seo在线教学
  • 重庆金山建设监理有限公司网站/全媒体广告策划营销
  • 保定做网站的公司/查看关键词被搜索排名的软件
  • 网站建设营销怎么做/杭州网站排名提升
  • Fastdfs分布式文件系统原理浅析
  • 3-2存储系统-主存与CPU的连接外部存储器
  • 20230116英语学习
  • 质量体系搭建
  • PAT2.7 弹球距离
  • 华为机试题:HJ13 句子逆序(python)
  • spring学习系列
  • Pytorch模型自定义数据集训练流程
  • 云原生技术学习笔记(基础版)
  • nohup + 命令实现后台不挂断地运行程序
  • 贪心算法专题
  • Android项目Gadle统一依赖管理