首页 > 编程语言 >java springboot监听事件和处理事件

java springboot监听事件和处理事件

时间:2024-09-14 17:54:53浏览次数:3  
标签:java springboot Spring 处理事件 springframework 事件 import org message

在Spring Boot中,监听和处理事件是一种常用的模式,用于在应用程序的不同部分之间传递信息。Spring 的事件发布/订阅模型允许我们创建自定义事件,并在这些事件发生时由注册的监听器进行处理。这里,我将提供一个简单的Spring Boot应用程序示例,其中将包括事件的定义、事件的发布以及事件的监听。

1. Spring Boot应用程序示例

1.1 步骤 1: 创建Spring Boot项目

首先,我们可以使用Spring Initializr(https://start.spring.io/)来快速生成一个新的Spring Boot项目。在项目中添加Spring Web依赖,因为我们将使用一个简单的REST API来触发事件发布。

1.2 步骤 2: 定义事件

首先,我们定义一个简单的事件类。这个类将作为事件对象在应用程序中传递。

import org.springframework.context.ApplicationEvent;  
  
public class CustomEvent extends ApplicationEvent {  
  
    private final String message;  
  
    public CustomEvent(Object source, String message) {  
        super(source);  
        this.message = message;  
    }  
  
    public String getMessage() {  
        return message;  
    }  
}

1.3 步骤 3: 创建事件监听器

然后,我们定义一个监听器来监听上面定义的事件。

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());  
        // 在这里可以执行更多操作,比如发送邮件、更新数据库等  
    }  
}

1.4 步骤 4: 发布事件

现在,我们需要一个方式来发布事件。通常,这会在业务逻辑代码中完成,但为了简单起见,我们将通过REST API来触发事件的发布。

首先,在我们的Spring Boot应用中添加一个控制器。

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.ApplicationEventPublisher;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestParam;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
public class EventController {  
  
    @Autowired  
    private ApplicationEventPublisher eventPublisher;  
  
    @PostMapping("/publish")  
    public String publishEvent(@RequestParam String message) {  
        CustomEvent customEvent = new CustomEvent(this, message);  
        eventPublisher.publishEvent(customEvent);  
        return "Event published with message: " + message;  
    }  
}

1.5 步骤 5: 运行我们的Spring Boot应用

现在,我们可以运行我们的Spring Boot应用。一旦应用启动,我们可以使用Postman或curl命令来触发事件发布。

bash复制代码

curl -X POST http://localhost:8080/publish?message=Hello%20Spring%20Events

我们将在控制台看到输出,表明CustomEventListener已经接收并处理了事件。

1.6 总结

以上就是在Spring Boot中监听和处理自定义事件的一个完整示例。通过定义事件、创建监听器并发布事件,我们可以在不同的组件或服务之间轻松地传递信息。这种模式在微服务架构中尤其有用,因为它支持松耦合的通信方式。

2. 更详细的Spring Boot代码示例

当然,我会给出一个更详细的Spring Boot代码示例,该示例包含了完整的项目结构、配置以及必要的类来展示如何定义事件、监听事件以及通过REST API发布事件。

2.1 项目结构

假设我们的项目结构如下:

src/  
|-- main/  
|   |-- java/  
|   |   |-- com/  
|   |   |   |-- example/  
|   |   |       |-- demo/  
|   |   |           |-- DemoApplication.java  
|   |   |           |-- CustomEvent.java  
|   |   |           |-- CustomEventListener.java  
|   |   |           |-- EventController.java  
|   |-- resources/  
|       |-- application.properties  
|  
|-- pom.xml

2.2 pom.xml

首先,确保我们的pom.xml文件中包含了Spring Boot的起步依赖(starter)和Spring Web依赖:

<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
  
    <!-- Optional, but recommended -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-test</artifactId>  
        <scope>test</scope>  
    </dependency>  
</dependencies>  
  
<properties>  
    <java.version>11</java.version>  
    <spring-boot.version>2.5.4</spring-boot.version>  
</properties>  
  
<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>${spring-boot.version}</version>  
</parent>

2.3 DemoApplication.java

这是Spring Boot的主应用类:

package com.example.demo;  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
public class DemoApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(DemoApplication.class, args);  
    }  
}

2.4 CustomEvent.java

这是自定义事件类:

package com.example.demo;  
  
import org.springframework.context.ApplicationEvent;  
  
public class CustomEvent extends ApplicationEvent {  
  
    private final String message;  
  
    public CustomEvent(Object source, String message) {  
        super(source);  
        this.message = message;  
    }  
  
    public String getMessage() {  
        return message;  
    }  
}

2.5 CustomEventListener.java

这是事件监听器类:

package com.example.demo;  
  
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());  
        // 在这里可以执行更多操作,比如发送邮件、更新数据库等  
    }  
}

2.6 EventController.java

这是REST控制器类,用于发布事件:

package com.example.demo;  
  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.ApplicationEventPublisher;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestParam;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
public class EventController {  
  
    @Autowired  
    private ApplicationEventPublisher eventPublisher;  
  
    @PostMapping("/publish")  
    public String publishEvent(@RequestParam String message) {  
        CustomEvent customEvent = new CustomEvent(this, message);  
        eventPublisher.publishEvent(customEvent);  
        return "Event published with message: " + message;  
    }  
}

2.7 application.properties

这是一个空的application.properties文件,但我们可以在这里添加任何Spring Boot配置。

2.8 运行和测试

(1)运行DemoApplication.java来启动Spring Boot应用。

(2)使用Postman或curl命令向http://localhost:8080/publish?message=Hello%20Spring%20Events发送POST请求。

(3)查看控制台输出,当我们向/publish端点发送POST请求时,Spring Boot应用会捕获到这个请求,并通过EventController中的publishEvent方法发布一个CustomEvent。这个事件随后被CustomEventListener捕获并处理,我们会在控制台上看到类似这样的输出:

复制代码

Received custom event - Hello Spring Events

这表明我们的事件监听器成功接收到了事件,并执行了相应的逻辑(在这个例子中是打印了一条消息)。

2.9 完整测试

为了完整地测试这个功能,我们可以使用Postman或者curl命令行工具来发送HTTP POST请求。以下是使用curl命令的示例:

bash复制代码

curl -X POST http://localhost:8080/publish?message=Hello%20Spring%20Events

我们应该会收到一个响应,内容是:

复制代码

Event published with message: Hello Spring Events

同时,我们的Spring Boot应用的控制台上也会显示事件被接收的消息。

2.10 总结

这个示例展示了如何在Spring Boot应用中定义自定义事件、发布事件以及监听事件。这是Spring事件驱动编程模型的一个简单应用,它允许我们以解耦的方式在应用的不同部分之间传递信息。在这个例子中,我们创建了一个简单的REST API来触发事件的发布,但这只是事件发布方式的一种。在更复杂的应用中,事件可能由多种不同的源触发,包括其他REST API调用、数据库更新、定时任务等。

通过利用Spring的事件监听和发布机制,我们可以轻松地构建出更加模块化和可维护的应用,因为我们可以在不修改监听器代码的情况下添加新的事件源,或者在不修改事件源代码的情况下添加新的监听器。这种解耦的方式使得应用更加灵活和可扩展。

文章转载自:TechSynapse

原文链接:https://www.cnblogs.com/TS86/p/18290024

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

标签:java,springboot,Spring,处理事件,springframework,事件,import,org,message
From: https://blog.csdn.net/kfashfasf/article/details/142254371

相关文章

  • JAVA毕业设计174—基于Java+Springboot+vue3+小程序的农产品社区团购小程序系统(源代
    毕设所有选题:https://blog.csdn.net/2303_76227485/article/details/131104075基于Java+Springboot+vue3+小程序的农产品社区团购小程序系统(源代码+数据库+开题+万字论文)174一、系统介绍本项目前后端分离(可以改为ssm版本),分为用户、管理员两种角色1、用户:注册、登......
  • 020、二级Java选择题综合知识点(持续更新版)
    1.排序二叉树的遍历结果为有序序列的是:中序遍历解释:中序遍历是一种遍历二叉树的方式,按照“左子树->根节点->右子树”的顺序访问节点。在排序二叉树(BST)中,这种遍历顺序会得到一个递增的有序序列,因为左子树中的所有节点值都小于根节点,而右子树中的节点值都大于根节点。......
  • SpringBoot框架下的房产销售系统设计与实现
    摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平......
  • 房产销售系统开发:SpringBoot技术要点
    摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平......
  • 基于Java实现的漫画之家系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的家政服务管理平台设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • Java 与大数据:Hadoop 和 Spark 的完美集成
    ......
  • 基于springboot微信小程序的多人协同办公系统
     目录:程序功能截图:程序部分代码参考:程序技术介绍:程序获取:......
  • 基于java教学辅助系统的计算机毕设源码+论文
    摘 要教学辅助系统是学校的教育工作的主要内容,信息量大,以及信息变动比较频繁一直是一个各学校棘手的问题,随着计算机更广泛的使用和网络传播的加速,教学辅助系统的相关工作已基本实现了多元的网络化管理,在很大程度上方便了广大的教师和学生,也有利于学校的教务相关工作的管理,教学质......
  • 基于JAVA局域网监听软件的设计与开发的计算机毕设源码+论文
    局域网监听软件的设计与开发摘 要网络监听软件是提供给网络安全管理人员进行安全管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息,以获取有用信息。作为黑客来说,通过网络监听可以获取其所需信息(比如密码等);对黑客活动和其他网络犯罪进行侦察、取证时,可以使用......