Spring基础篇:自定义事件与监听器

简介: Spring的事件与监听器

事件与监听器用来做什么?

发布/订阅模式来,某个事件发布后,订阅该事件的人将自动去执行特定的操作。

例子:我关注了UP主,当UP主更新视频的时候,我就会被通知到。

Spring为实现这样的操作,做了什么

Spring为了实现这样的操作,以事件驱动和监听器展现。它提供了

  • 事件:定义一个被监听的事件。
  • 广播器:可以广播事件(IOC容器本身作为了一个广播器)。
  • 监听器:可以监听事件。

在Spring中可以这样理解例子:

【监听器】关注了【监听动作】UP主,当UP主更新【事件发布】视频【事件】的时候,我【监听器】就会被通知【广播器广播】到。

通过这个例子,那么我们可以锁定学习的核心了,我们需要学习

  • 怎样定义事件
  • 怎样通过广播器去发布事件
  • 怎样写一个监听器去监听事件

以一个例子展开

我关注了UP主,当UP主更新视频的时候,我就会被通知到。

定义事件

通过继承ApplicationEvent的方式,自定义一个NewVideoEvent事件。假设这是一个视频发布的事件

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

Service层操作业务

我们在Service层中将这个事件通过广播器去发布,也就是当UP主更新视频的时候,广播事件。

  • 第一步:实现ApplicationEventPublisherAware拿到广播器。

    • 该操作会让我们重写一个setApplicationEventPublisher方法,通过set就明白我们需要对一个成员属性进行赋值,而这个成员属性就是ApplicationEventPublisher,广播器。
  • 第二步:在业务操作后,通过ApplicationEventPublisher对象,调用publishEvent,将事件发布。
@Service
public class Up implements ApplicationEventPublisherAware {
    private ApplicationEventPublisher applicationEventPublisher;

    public void publishVideo(){
        // 发布视频的操作
        System.out.println("发布视频");
        // 发布事件
        applicationEventPublisher.publishEvent(new NewVideoEvent("视频"));
    }
    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

}

监听器监听业务层发布的事件,并操作

它有两种操作方式:注解的方式实现接口的方式

通过注解的方式

@EventListener:直接在方法上放上该直接即可,记得将它交给Spring容器管理,方法参数要放上监听的事件。

@Component
public class AnnoEventListener {
    @EventListener
    public void ListenNewVideoEvent(NewVideoEvent event){
        System.out.println("你关注的UP主更新视频啦");
    }
}

通过实现接口的方式

implements ApplicationListener<事件类型>

@Component
public class ImplEventListener implements ApplicationListener<NewVideoEvent> {
    @Override
    public void onApplicationEvent(NewVideoEvent event) {
        System.out.println("你关注的UP更新视频啦");
    }
}
目录
相关文章
|
13天前
|
监控 NoSQL Java
在 Spring Boot 中实现 Redis 的发布/订阅功能可以通过 RedisTemplate 和消息监听器来完成
在 Spring Boot 中实现 Redis 的发布/订阅功能可以通过 RedisTemplate 和消息监听器来完成
16 1
|
2月前
|
Java Spring
flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案
flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案
|
2月前
spring-state-machine监听器
spring-state-machine监听器
21 0
|
12月前
|
设计模式 缓存 Java
Spring监听器用法与原理详解(带ApplicationListener模型图)(1)
Spring监听器用法与原理详解(带ApplicationListener模型图)
493 0
|
2月前
spring-state-machine监听器
spring-state-machine监听器
27 0
|
12月前
|
设计模式 Java 数据库连接
Spring高手之路7——事件机制与监听器的全面探索
本篇文章为你详细解析了Spring的事件机制,包括了Spring事件模型的四个核心概念:事件源、事件、广播器、监听器。我们通过深入浅出的实例解析了如何自定义事件和监听器,以及如何在实际项目中应用。最后,我们还详细探讨了监听器和Bean的生命周期的关系。无论你是Spring初学者,还是有一定经验的开发者,阅读本文都将帮助你更深入地理解Spring的事件机制和监听器,掌握Spring框架的核心技术。
491 0
Spring高手之路7——事件机制与监听器的全面探索
|
12月前
|
设计模式 Java Spring
Spring 观察者模式详解以及自定义监听器扩展实现(下)
Spring 观察者模式详解以及自定义监听器扩展实现(下)
94 0
|
12月前
|
存储 Java Spring
Spring 观察者模式详解以及自定义监听器扩展实现(上)
Spring 观察者模式详解以及自定义监听器扩展实现
122 0
|
12月前
|
设计模式 缓存 Java
Spring监听器用法与原理详解(带ApplicationListener模型图)(2)
Spring监听器用法与原理详解(带ApplicationListener模型图)
180 0
|
Java Spring
Spring Boot 监听器、拦截器以及过滤器的作用、差异?
Spring Boot 监听器、拦截器以及过滤器的作用、差异?
191 0