微服务——SpringBoot使用归纳——Spring Boot中使用监听器——Spring Boot中自定义事件监听

简介: 本文介绍了在Spring Boot中实现自定义事件监听的完整流程。首先通过继承`ApplicationEvent`创建自定义事件,例如包含用户数据的`MyEvent`。接着,实现`ApplicationListener`接口构建监听器,用于捕获并处理事件。最后,在服务层通过`ApplicationContext`发布事件,触发监听器执行相应逻辑。文章结合微服务场景,展示了如何在微服务A处理完逻辑后通知微服务B,具有很强的实战意义。

3. Spring Boot中自定义事件监听

在实际项目中,我们往往需要自定义一些事件和监听器来满足业务场景,比如在微服务中会有这样的场景:微服务 A 在处理完某个逻辑之后,需要通知微服务 B 去处理另一个逻辑,或者微服务 A 处理完某个逻辑之后,需要将数据同步到微服务 B,这种场景非常普遍,这个时候,我们可以自定义事件以及监听器来监听,一旦监听到微服务 A 中的某事件发生,就去通知微服务 B 处理对应的逻辑。

3.1 自定义事件

自定义事件需要继承 ApplicationEvent 对象,在事件中定义一个 User 对象来模拟数据,构造方法中将 User 对象传进来初始化。如下:

/**

* 自定义事件

* @author shengwu ni

* @date 2018/07/05

*/

public class MyEvent extends ApplicationEvent {


   private User user;


   public MyEvent(Object source, User user) {

       super(source);

       this.user = user;

   }


   // 省去get、set方法

}

3.2 自定义监听器

接下来,自定义一个监听器来监听上面定义的 MyEvent 事件,自定义监听器需要实现 ApplicationListener 接口即可。如下:

/**

* 自定义监听器,监听MyEvent事件

* @author shengwu ni

* @date 2018/07/05

*/

@Component

public class MyEventListener implements ApplicationListener<MyEvent> {

   @Override

   public void onApplicationEvent(MyEvent myEvent) {

       // 把事件中的信息获取到

       User user = myEvent.getUser();

       // 处理事件,实际项目中可以通知别的微服务或者处理其他逻辑等等

       System.out.println("用户名:" + user.getUsername());

       System.out.println("密码:" + user.getPassword());


   }

}

然后重写 onApplicationEvent 方法,将自定义的 MyEvent 事件传进来,因为该事件中,我们定义了 User 对象(该对象在实际中就是需要处理的数据,在下文来模拟),然后就可以使用该对象的信息了。

OK,定义好了事件和监听器之后,需要手动发布事件,这样监听器才能监听到,这需要根据实际业务场景来触发,针对本文的例子,我写个触发逻辑,如下:

/**

* UserService

* @author shengwu ni

*/

@Service

public class UserService {


   @Resource

   private ApplicationContext applicationContext;


   /**

    * 发布事件

    * @return

    */

   public User getUser2() {

       User user = new User(1L, "倪升武", "123456");

       // 发布事件

       MyEvent event = new MyEvent(this, user);

       applicationContext.publishEvent(event);

       return user;

   }

}

在 service 中注入 ApplicationContext,在业务代码处理完之后,通过 ApplicationContext 对象手动发布 MyEvent 事件,这样我们自定义的监听器就能监听到,然后处理监听器中写好的业务逻辑。

最后,在 Controller 中写一个接口来测试一下:

@GetMapping("/request")

public String getRequestInfo(HttpServletRequest request) {

   System.out.println("requestListener中的初始化的name数据:" + request.getAttribute("name"));

   return "success";

}

在浏览器中输入 http://localhost:8080/listener/publish,然后观察一下控制台打印的用户名和密码,即可说明自定义监听器已经生效。

4. 总结

本课系统的介绍了监听器原理,以及在 Spring Boot 中如何使用监听器,列举了监听器的三个常用的案例,有很好的实战意义。最后讲解了项目中如何自定义事件和监听器,并结合微服务中常见的场景,给出具体的代码模型,均能运用到实际项目中去,希望读者认真消化。

课程源代码下载地址:戳我下载

目录
相关文章
|
8月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
759 2
|
9月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
7180 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
存储 JSON Java
947 0
|
10月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1454 3
|
11月前
|
人工智能 安全 Java
Spring Boot 过滤器 拦截器 监听器
本文介绍了Spring Boot中的过滤器、拦截器和监听器的实现与应用。通过Filter接口和FilterRegistrationBean类,开发者可实现对请求和响应的数据过滤;使用HandlerInterceptor接口,可在控制器方法执行前后进行处理;利用各种监听器接口(如ServletRequestListener、HttpSessionListener等),可监听Web应用中的事件并作出响应。文章还提供了多个代码示例,帮助读者理解如何创建和配置这些组件,适用于构建更高效、安全和可控的Spring Boot应用程序。
941 0
|
XML 搜索推荐 Java
Spring源码 --- 监听器的原理 (下)
Spring源码 --- 监听器的原理 (下)
257 0
Spring源码 --- 监听器的原理 (下)
|
设计模式 Java Nacos
Spring源码 --- 监听器的原理 (上)
Spring源码 --- 监听器的原理
559 0
Spring源码 --- 监听器的原理 (上)
|
8月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1154 3

热门文章

最新文章