目录
- 前言
- 1. 基本知识
- 2. Demo
前言
Java的基本知识推荐阅读:
- java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
- Spring框架从入门到学精(全)
1. 基本知识
用于标注一个方法为事件监听器
- 事件监听器方法可以接收和处理发布的事件
- 事件驱动编程模型广泛用于构建松耦合的系统组件,使得不同组件可以通过事件进行交互,而不需要直接依赖
程序设计范式,程序的执行是由事件触发的,而不是顺序执行。在这种模型中,事件的产生、传播和处理是核心
事件和监听器
- 事件:一个对象,通常包含与特定操作相关的信息
例如,用户点击按钮、文件被修改等都可以视为事件 - 监听器:一个对象,用于接收和处理事件
通常实现一个接口,并包含一个方法用于处理特定类型的事件
Spring 框架中的事件机制
Spring 框架提供了一套完整的事件驱动机制,包含事件发布、事件监听等功能
- 自定义事件:用户自己定义的事件类,通常继承自
ApplicationEvent
类 - 事件发布:使用
ApplicationEventPublisher
接口发布事件 - 事件监听:使用
@EventListener
注解来标注方法,使其成为事件监听器
2. Demo
通过Demo了解整体的运行机制
Demo的类别如下:
- CustomEvent 是自定义事件类
- CustomEventPublisher 是事件发布者组件
- CustomEventListener 是事件监听器组件
- EventDemoApplication 是 Spring Boot 应用的入口类
- EventDemoRunner 用于测试事件发布和监听的功能
- 自定义一个事件类
import org.springframework.context.ApplicationEvent;
public class CustomEvent extends ApplicationEvent {
private String message;
public CustomEvent(Object source, String message) {
super(source);
this.message = message;
}
public String getMessage() {
return message;
}
}
- 创建事件发布者组件
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
@Component
public class CustomEventPublisher {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void publishEvent(final String message) {
CustomEvent customEvent = new CustomEvent(this, message);
applicationEventPublisher.publishEvent(customEvent);
}
}
- 创建事件监听器组件
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class CustomEventListener {
@EventListener
public void handleCustomEvent(CustomEvent event) {
System.out.println("Received custom event - " + event.getMessage());
}
}
本身是在Springboot的启动类,所以少不了
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class EventDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EventDemoApplication.class, args);
}
}
此处是Demo,对应还需要通过其他机制配合来触发这个事件
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class EventDemoRunner implements CommandLineRunner {
@Autowired
private CustomEventPublisher customEventPublisher;
@Override
public void run(String... args) throws Exception {
customEventPublisher.publishEvent("Hello, World!");
}
}
执行启动类,对应的结果如下: