SpringBoot事件发布和监听 SpringBoot事件发布和监听详解
ForeverKobe 人气:0想了解SpringBoot事件发布和监听详解的相关内容吗,ForeverKobe在本文为您仔细讲解SpringBoot事件发布和监听的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:springboot事件发布和监听,springboot监听器,springboot,事件,下面大家一起来学习吧。
概述
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。事件监听的作用与消息队列有一点类似。
事件监听的结构
主要有三个部分组成:
- 发布者Publisher
- 事件Event
- 监听者Listener
Publisher,Event和Listener的关系
事件
我们自定义事件MyTestEvent继承了ApplicationEvent,继承后必须重载构造函数,构造函数的参数可以任意指定,其中source参数指的是发生事件的对象,一般我们在发布事件时使用的是this关键字代替本类对象,而user参数是我们自定义的注册用户对象,该对象可以在监听内被获取。
@Getter public class MyTestEvent extends ApplicationEvent { private static final long serialVersionUID = 1L; private User user; public MyTestEvent(Object source, User user) { super(source); this.user = user; } }
发布者
事件发布是由ApplicationContext对象管控的,我们发布事件前需要注入ApplicationContext对象调用publishEvent方法完成事件发布。
ApplicationEventPublisher applicationEventPublisher 虽然声明的是ApplicationEventPublisher,但是实际注入的是applicationContext
@RestController @RequestMapping("/test") public class TestController { @Autowired ApplicationContext applicationContext; @Autowired ApplicationEventPublisher applicationEventPublisher; @GetMapping("testEvent") public void test() { applicationEventPublisher.publishEvent(new MyTestEvent("dzf-casfd-111", new User("dzf-625096527-111", "xiaoming", 19))); applicationEventPublisher.publishEvent(new MyTestEvent("dzf-49687489-111", new User("dzf-625096527-111", "xiaowang", 20))); } }
监听者
面向接口编程,实现ApplicationListener接口
@Component public class MyTestListener implements ApplicationListener<MyTestEvent> { @Override public void onApplicationEvent(MyTestEvent myTestEvent) { System.out.println("MyTestListener : " + myTestEvent.getUser()); } }
使用@EventListener注解配置
@Component public class MyTestListener2{ @EventListener(MyTestEvent.class) public void onApplicationEvent(MyTestEvent myTestEvent) { System.out.println("MyTestListener2:" + myTestEvent.getUser()); } }
总结
加载全部内容