首页 > 其他分享 >Spring 事件

Spring 事件

时间:2023-03-28 19:12:57浏览次数:32  
标签:publisher author wangzhi Spring void FeiShuExceptionEvent 事件 public

事件
Spring 的默认事件是用来监听容器的,有如下事件:ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent、ContextRefreshedEvent,分别表示容器启动、停止、关闭和刷新事件,监听的话想对简单,实现 ApplicationListener 接口或者在某个 Bean 的方法上增加 @EventListener 注解。

/**
 * @author wangzhi
 */
@Component
@Order(1)
public class ContextClosedEventListener implements ApplicationListener<ContextClosedEvent> {
    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        System.out.println("ContextClosedEventListener ContextClosedEvent");
    }
}


/**
 * @author wangzhi
 */
@Component
public class ContextClosedEventAnnotationListener {

    @Order(2)
    @EventListener
    public void onEvent(ContextClosedEvent event) {
        System.out.println("ContextClosedEventAnnotationListener ContextClosedEvent");
    }

}

自定义监听的步骤:

  1. 定义自己的事件,也就是 Event,需要继承 ApplicationEvent
  2. 定义自己的事件发布器,需要实现 ApplicationEventPublisherAware
  3. 监听事件,处理自己的业务逻辑
    代码如下:
/**
 * 飞书接口异常事件
 * @author wangzhi
 */
public class FeiShuExceptionEvent extends ApplicationEvent {

    public FeiShuExceptionEvent(Object source) {
        super(source);
    }
    
}



/**
 * 事件发布器
 * @author wangzhi
 */
@Component
public class FeiShuEventPublisher implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher publisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.publisher = applicationEventPublisher;
    }

    public void fire() {
        publisher.publishEvent(new FeiShuExceptionEvent("fei shu exception"));
    }

}


/**
 * 飞书异常事件监听器
 * @author wangzhi
 */
@Component
public class FeiShuExceptionListener {

    @EventListener
    public void onEvent(FeiShuExceptionEvent feiShuExceptionEvent) {
        // 处理自己的业务,可以给相关负责人发送消息什么的
        System.out.println("FeiShuExceptionEvent source:" + feiShuExceptionEvent.getSource());
    }
}

发布器如果要静态使用,参考如下:

/**
 * 发布器
 * @author wangzhi
 */
@Component
public class FeiShuExceptionPublisher  implements ApplicationEventPublisherAware {

    private static ApplicationEventPublisher publisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        FeiShuExceptionPublisher.publisher = applicationEventPublisher;
    }

    public static void fireEvent(FeiShuExceptionEvent event) {
        FeiShuExceptionPublisher.publisher.publishEvent(event);
    }
}

参考:《学透 Spring》

标签:publisher,author,wangzhi,Spring,void,FeiShuExceptionEvent,事件,public
From: https://www.cnblogs.com/wadmwz/p/17266350.html

相关文章

  • Ubuntu服务器下部署Springboot项目教程
    IDEA是Springboot服务器后台的开发工具,软件自备,项目自备。1.进入IDEA,点击IDEA最右边的Maven->Lifecycle->package2.打包之后,你可以在项目文件夹的target文件夹里面看到一个x......
  • Android开发 触控事件分发_2_应用层的触控事件分发
    前言在上一篇博客讲解了系统层的触控通道注册,此篇博客将讲解应用层的触控事件分发分发概况流程通过下面的简单流程图大概了解,但是实际使用的时候分发并不是一个下面......
  • 19-springboot自动配置原理
    SpringBoot自动配置原理(SpringBoot自动装配原理,SpringBootstarter原理)SpringBoot可以根据定义在classpath下的类,自动的给你生成一些Bean,并加载到Spring的Context中,自动配......
  • Selenium鼠标事件
    前言:执行自动化测试过程中遇到鼠标的操作,例如:左键单击、左键双击、右键单击、鼠标悬停、鼠标拖动等等操作,如何模拟鼠标的操作?1、导入ActionChains包想使用selenium中的鼠......
  • Spring Aop 常见注解和执行顺序
    SpringAop常见注解和执行顺序IOC、AOP、Bean注入、Bean的生命周期、Bean的循环依赖首先我们一起来回顾一下SpringAop中常用的几个注解:@Before 前置通知:目......
  • SpringBoot+RocketMq+Mybatis项目整合demo
    转载自:https://blog.csdn.net/mikewuhao/article/details/106666109 ============= Demo实现的功能项目启动生产者和消费者2个服务后,生产者端执行用户查询,从数据......
  • Spring boot 、Vue学习体会
    近期集中学习了Springboot、Vue等技术,学习过程也是不断碰壁,总的来说自认为有些涨进,抓住核心、深入关键、逐步剖析。两个技术分别负责后台和前端,学习后一个感受,两个技术......
  • SpringBoot的EnableCaching简述
    SpringBoot中的EnableCaching简述springboot中自带有数据缓存机制,主要通过其org.springframework.cache包下的各种类来实现。EnableCaching@EnableCaching是启用缓存......
  • SpringBoot运行端口被占用
    运行Springboot项目端口被占用如图:   解决方式-命令行进入cmd界面执行查询端口占用情况netstat-ano|findstr8210结果执行中止端口命令 task......
  • Spring4+Hibernate4事务小记
    学习Spring+Hibernate,非常强大的框架,为了追新,就直接从最高版本开始学习了,这要冒很大的风险,因为网上可查到的资料大多是针对旧版本的,比如Spring3,Hibernate3。根据我的测试,记......