手机网站怎样做,旅游网网站建设,广告设计有限公司,seo外链前言#xff1a;
上一篇我们分析了 Spring Boot 事件监听的原理#xff0c;本篇我们来自定义实现自己的监听器。
Spring Boot 系列文章传送门
Spring Boot 启动流程源码分析#xff08;2#xff09;
Spring Boot 启动流程源码分析#xff08;2#xff09;
Spring Bo…前言
上一篇我们分析了 Spring Boot 事件监听的原理本篇我们来自定义实现自己的监听器。
Spring Boot 系列文章传送门
Spring Boot 启动流程源码分析2
Spring Boot 启动流程源码分析2
Spring Boot 自动配置实现原理源码分析
Spring Boot 自定义 starter 启动器
Spring Boot 事件监听机制工作原理
Spring Boot 自定义监听器
创建 Spring Boot 自定义监听器通常要经过一下步骤
定义事件。定义事件监听器。定义事件发布器。触发事件完成验证。
定义事件
定义 Event 事件MyEvent 继承了 ApplicationEvent 类如果我们要使用 Spring 的事件监听机制那我们定义的 Event 事件必须继承ApplicationEvent 否则就无法使用。
public class MyEvent extends ApplicationEvent {private final String event;public MyEvent(Object source, String event) {super(source);this.event event;}public String getEvent() {return event;}}定义事件监听器
事件监听器实现了 ApplicationLister 接口泛型为 ApplicationEvent因为要监听事件所以必须按照 Spring 的规则来onApplicationEvent 方法就是监听到的事件在这里可以完成业务逻辑处理因为事件监听器需要加入Spring IOC 容器中才能生效因此 MyListener 使用了 Component 注解。
Slf4j
Component
public class MyListener implements ApplicationListenerMyEvent {Overridepublic void onApplicationEvent(MyEvent myEvent) {//监听器调用事件方法String event myEvent.getEvent();log.info(event:{},event);}
}定义事件发布器
Sprin Boot 监听器要生效必须要有一个时间发布器自定了一个事件发布器注入了 ApplicationEventPublisher使用 ApplicationEventPublisher#publishEvent 方法完成事件发布。
Component
public class MyPublisher {Resourceprivate ApplicationEventPublisher applicationEventPublisher;public void publish(){applicationEventPublisher.publishEvent(new MyEvent(new MyListener(),publish event test));}
}触发事件完成验证
我们这里直接使用 Spring Boot 启动类来完成事件发布测试如下
SpringBootApplication
public class MyStudySpringBootApplication {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(MyStudySpringBootApplication.class, args);MyPublisher publisher context.getBean(MyPublisher.class);publisher.publish();}}测试结果
2024-06-30 21:35:42.926 INFO 29928 --- [main] com.my.study.start.listener.MyListener : event:publish event test结果符合预期这样我们就完成了一个简单的自定义事件监听一般来说我们在项目开发中是使用不到事件监听机制的但是源码中大量使用了监听机制因为我们还是需要了解监听器是怎样实现的。
自定义监听器的注解实现方式
使用 EventListener 注解代码如下
Slf4j
Component
public class MyAnnotationListener {EventListenerpublic void handleCustomEvent(MyEvent myEvent) {//监听器调用事件方法String event myEvent.getEvent();log.info(event2:{}, event);}}欢迎提出建议及对错误的地方指出纠正。