首页 > 其他分享 >初探spring事件applicationEvent

初探spring事件applicationEvent

时间:2022-12-07 21:12:37浏览次数:36  
标签:springframework spring boot applicationEvent 事件 初探 org event

前言

不知道各位小伙伴对事件(event)这个比较抽象的名词如何理解,从我实际开发和使用经验来说,事件通常指的是某一特定条件下触发的一组操作。

做过生态开发(ISV)的小伙伴一定对事件不陌生,因为在和这些生态厂商(钉钉、企微、飞书等)进行业务交互的时候,总是避不开事件的,我们总是要对接他们的各种事件,比如入职事件、离职事件、用户变更事件、部门变更事件等等。

今天我们就来通过一个简单的示例,来演示下ApplicationListener应用级事件的使用流程。

ApplicationEvent

是什么

一个事件主要包括以下几个要素:

  • 事件注册
  • 事件监听
  • 事件触发

所以ApplicationEvent就是spring提供的一套集事件注册、监听、触发为一体的事件实现。

如何用

创建项目,增加模块配置

首先我们需要创建一个spring-boot项目,然后在项目的resouces/META-INF文件夹下增加名为spring.factories的文件,如果文件夹不存在,需要手动创建。

这个文件的作用是配置spring boot的常用组件,当然我们也可以通过注解的方式进行配置,关于注解的说明我们后面再说。

我们需要在文件中增加如下配置:

org.springframework.context.ApplicationListener=io.github.syske.springbootbeanlisttest.listener.SyskeApplicationListener

这个文件除了可以配置ApplicationListener之外,还可以配置EnvironmentPostProcessorPropertySourceLoaderSpringApplicationRunListener,这几个组件的应用,我们后期也会逐一分享。

这种配置方式其实就是SPI机制,这种配置的好处是,可以在不变更项目代码的基础上实现组件的增加和移除。

创建自己的ApplicationListener,这里需要实现ApplicationListener接口,并实现onApplicationEvent方法,事件触发时,会执行该方法。

public class SyskeApplicationListener implements ApplicationListener<SyskeApplicationEvent> {
    @Override
    public void onApplicationEvent(SyskeApplicationEvent event) {
        String eventName = event.getEventName();
        System.out.println(eventName);
        Object eventBody = event.getEventBody();
        System.out.println(eventBody);
    }
}

这个方法的入参是ApplicationEvent或者它的子类,所以这里我们可以根据需要自定义自己的事件,并继承ApplicationEvent

public class SyskeApplicationEvent extends ApplicationEvent {
  
    public SyskeApplicationEvent(Object source) {
        super(source);
    }

    private String eventName;

    private Object eventBody;
    // getter/setter方法省略
}

事件注册

因为我们是直接在spring boot项目中使用的spring的事件组件,所以我们并不需要自己去做时间的注册,因为在spring boot的启动过程中,会帮我们把事件进行注册,关于这块的内容,我在之前分享spring boot启动过程的时候已经分享过了,感兴趣的小伙伴可以去看下(时间久到我都忘记了

标签:springframework,spring,boot,applicationEvent,事件,初探,org,event
From: https://www.cnblogs.com/caoleiCoding/p/16964548.html

相关文章

  • spring boot_04
    1.springboot整合第三方1.1整合mybatis-plus导入mybatis-plus<dependency><groupId>com.baomidou</groupId><artifactId>mybati......
  • SpringBoot整合定时任务框架xxl-job
    1.github上下载xxl-job工程https://github.com/xuxueli/xxl-job2.导入idea3. 启动调度中心从github上才下下来的工程,主要分为三个部分,一个是后台管理系统模块,一个......
  • Springboot处理跨域请求
    Springboot中如何处理跨域请求一.什么是跨域?我们知道Url的一般格式:协议+域名(子域名+主域名)+端口号+资源地址比如:https://www.itquanmingxing.c......
  • SpringMVC —— RESTful案例
    案例:基于RESTful页面数据交互         ......
  • Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开
    ⚡平台简介⚡AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用。本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架。适合个人......
  • spring boot中Excel文件下载踩坑大全
    项目场景:Springboot文件下载调用接口下载springboot工程的resources目录下的excel模板文件,非常常见的一个文件下载功能,但是却容易遇到很多坑,下面总结记录下。问题一:下载的......
  • SpringBoot整合elasticsearch-rest-client实战
    前言很多人在Springboot项目中都已经习惯采用Spring家族封装的spring-data-elasticsearch来操作elasticsearch,而官方更推荐采用rest-client。今天给大家介绍下在springbo......
  • 给你的SpringBoot工程打的jar包瘦瘦身
    Springboot默认方式打包由于打的是全量依赖包(也称为fat包),不但打包慢,体积大,传输也慢,今天教大家给springboot瘦瘦身。背景现在微服务架构越来越流行,一个项目10多个基于sprin......
  • Idea中1个springboot项目启动N份服务
    使用的idea版本是IntelliJIDEA2022.2.3(UltimateEdition)Build#IU-222.4345.14,builtonOctober5,2022 01  02  从服务ImApplication18081复制......
  • Spring Cloud 生态2020
    ......