Spring事件
1.事件对象
2.发布事件
3.监听事件
4.异步监听
事件机制
事件机制是基于监听者设计模式的实现,监听者模式包括三个部分:
- 事件源:具体事件源,用于发布事件
- 事件对象:封装事件源对象和事件相关信息,用于在事件源和监听器之间传递信息,可以称为事件发布者
- 事件监听器:监听事件,用于对事件的处理,可以称为事件处理者
Spring 提供了 ApplicationEventPublisher
接口用于发布事件。
可以通过继承 ApplicationEvent
来定义事件对象。
可以通过实现 ApplicationListener<E>
接口来定义事件监听器。
1.事件对象
项目中,首先定义一个事件对象来封装事件传递的相关信息
// 自定义事件对象
public class MyEvent extends ApplicationEvent{
/** 自定义事件携带的信息 */
private final String name;
public MyEvent(Object source, String name) {
super(source);
this.name = name;
}
public String getName() {
return name;
}
}
2.发布事件
@Slf4j
@Service
@RequiredArgsConstructor
public class PuslishService {
/** 注入ApplicationContext用来发布事件 */
private final ApplicationContext applicationContext;
public void sendData(String name) {
applicationContext.publishEvent(new MyEvent(this, name));
}
}
3.监听事件
监听并处理事件,实现 ApplicationListener 接口
@Slf4j
@Component
public class MyListener implements ApplicationListener<MyEvent> {
@Override
public void onApplicationEvent(MyEvent event) {
String name = event.getName();
log.info("Listening to an event, name info is {}", name);
}
}
或者使用 @EventListener 注解;
@Slf4j
@Component
public class MyListener1 {
@EventListener
public void processMyEvent(MyEvent event) {
String name = event.getName();
log.info("Listening to an event, name info is {}", name);
}
}
4.异步监听
默认的监听器都是同步处理事件任务的,可以使用@Async
注解来进行异步处理
首先在监听类的方法上加上@Async
注解,接着在启动类上加上@EnableAsync
注解