首页 > 其他分享 >【Spring】Spring的事件监听ApplicationListener 、ApplicationEvent

【Spring】Spring的事件监听ApplicationListener 、ApplicationEvent

时间:2024-03-04 16:57:20浏览次数:23  
标签:ApplicationListener Spring time List ApplicationEvent private vos import public

 

Spring中的事件监听机制,事件驱动开发
可以用在以下这些场景:
1.业务代码入口在 下一级模块module, sender消息发送者在上一级模块module,不想循环依赖,就这样用
2.解耦合的事件驱动模式,观察者模式等
3.待补充



实例代码:

1. 业务代码testAAA,执行同步业务

private void testAAA(List<ChannelInventory> channelInventories){
    try {
        List<SyncStockVO> syncRecords = new ArrayList<>();
        for (ChannelInventory channelInventory : channelInventories) {
            SyncStockVO syncStockVO = new SyncStockVO();
            syncStockVO.setId(channelInventory.getId());
            syncStockVO.setSkuId(channelInventory.getSkuId());
            ......
            syncRecords.add(syncStockVO);
        }
        omsStockSyncHelper.sendStockStatusChangeMsg(syncRecords);

        log.error("同步 完成,request:{}", JSON.toJSONString(syncRecords));
    } catch (Exception e) {
        String errMsg = "同步 异常";
        log.error(errMsg, e);
        retrySyncStock(channelInventories);
    }
}

 

 

2.事件发布助手 OmsStockSyncHelper

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;

@Component
public class OmsStockSyncHelper {
    @Resource
    private ApplicationEventPublisher publisher;

    public void sendStockStatusChangeMsg(List<SyncStockVO> vos){
        publisher.publishEvent(new OmsStockSyncEvent(vos));
    }
}

 

 

3.事件体,必须是ApplicationEvent的子类

import org.springframework.context.ApplicationEvent;
import java.util.List;

public class OmsStockSyncEvent  extends ApplicationEvent {

    private static final long serialVersionUID = -2926756513711326075L;
    private List<SyncStockVO> vos;
    /**
     * 时间戳
     */
    private Long time;

    public List<SyncStockVO> getVos() {
        return vos;
    }

    public void setVos(List<SyncStockVO> vos) {
        this.vos = vos;
    }

    public Long getTime() {
        return time;
    }

    public void setTime(Long time) {
        this.time = time;
    }

    public OmsStockSyncEvent(List<SyncStockVO> volist) {
        super("OmsStockSyncEvent");
        vos = volist;
        time = System.currentTimeMillis();
    }
}

 

 

4.事件捕获者,必定是实现了ApplicationListener的类

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

@Slf4j
@Service
public class OmsStockSyncHandler implements ApplicationListener<OmsStockSyncEvent> {

    @Resource
    private OmsStockMsgSender sender;
    
    
    //事件捕获之后,你怎么处理,就按自己的业务处理咯,这里示例是发送MQ,所以写了一个sender
    @Override
    public void onApplicationEvent(OmsStockSyncEvent event) {
        sender.send(event);
    }
}

 

 

 



标签:ApplicationListener,Spring,time,List,ApplicationEvent,private,vos,import,public
From: https://www.cnblogs.com/sxdcgaq8080/p/18052113

相关文章

  • springboot3+vue3(三)接口参数校验Spring Validation框架
    1、引入Validation依赖<!--参数校验依赖validation--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>va......
  • springboot3+vue3(二)注册接口
     为了方便实体类操作,这里添加一下lombok的依赖,添加好以后右键重新加载mavenlombok注解含义大全:https://www.jianshu.com/p/41c4a226e955<!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifa......
  • 【2024面试刷题】一、Spring Cloud 面试题
    1、什么是SpringCloud?SpringCloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。SpringClou......
  • springboot3+vue3大事件(一)项目准备工作
     1、执行sql脚本,准备数据库表--创建数据库createdatabasedev;--使用数据库usedev;--用户表createtableuser(idintunsignedprimarykeyauto_incrementcomment'ID',usernamevarchar(20)notnullunique......
  • 「Java开发指南」MyEclipse如何支持Spring Scaffolding?(四)
    在上文中主要为大家介绍了应用程序分层、代码助手等内容,本文将继续介绍SpringDSL模型等。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论5.SpringDSL模型支持Spring的MyEclipse还有一个特性,它是面向那些希望通过使用抽象层(模型驱动开发)来......
  • SpringCloud Alibaba-5-并发访问
    微服务架构应用设计目的为了应对高并发环境!1.什么是并发,并行并发:指在同一时间段内,多个任务或进程同时执行或交替执行的能力。并行:指多个任务在同一时间段内同时执行,需要多个处理器或多核处理器来实现。总的来说,并发更多地强调任务之间的交替执行,而并行更多地强调任务的同......
  • Spring 的 IOC 和 AOP 是什么,有哪些优点?
    Spring框架中的IOC是**控制反转**,AOP是**面向切面编程**。IOC是Spring框架的核心特性之一,它代表的是控制反转,意味着将对象的创建和管理交给Spring容器,而不是传统的在对象内部进行控制。这样可以实现对象之间的解耦,提高代码的可维护性和灵活性。IOC的底层原理包括XML解析、工厂模......
  • SpringBoot—01—简介;基本使用;
     @RequestMapping@Controller@GetMapping@ResponstBody(不走视图解析,直接返回数据)@Component(是Controller和Service的父类,就是让sping创建一个bean)@ConfigurationPerproties(prefix=xxx),从配置文件中读取配置赋值给实体类@Autowire,自动装配,但是具体的还是没搞懂@valiated,做......
  • Java高频面试题---Spring
    一、介绍一下Spring的IOC所谓的IOC,就是控制反转的意思。何为控制反转?在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。例如,一个对象需要依赖于其他对象,那么它会直接new出来对象。这样的设计通常被称为“流程控制”。而在IOC中,控制关系发生了反转。控制权被转......
  • SpringBoot(二)
    ⅤⅠⅠspringboot原理1.autoconfig1.1Condition:选择性的创建bean注入一个Bean:@ConfigurationClass下@Bean方法返回一个User,就获得name="user"的Bean@Conditional(实现类.class)=>决定Spring是否创建这个Bean【需求1】导入Jedis坐标后创建Bean,否则失败Condition实......