-----------
package saas.framework.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.stereotype.Service;
@Service
public class EventAPI {
@Autowired
private ApplicationEventMulticaster eventMultiCaster;
public void publishEvent(ApplicationEvent event) {
eventMultiCaster.multicastEvent(event);
}
}
------------------------------------------------------------------------------------------------------
private void publishEvent(Object source, OperateStateEnum operateState) {
if(source != null) {
eventAPI.publishEvent(new AprvEvent(source, operateState));
}
}
----------------------------------------------------------------------------------------------------
package saas.crm.aprv.service.event;
import org.springframework.context.ApplicationEvent;
import saas.crm.aprv.model.enums.OperateStateEnum;
/**
* Created by lee on 2016/10/18.
*/
public class AprvEvent extends ApplicationEvent {
private final OperateStateEnum operateState;
/**
* Create a new ApplicationEvent.
*
* @param source the component that published the event (never {@code null})
*/
public AprvEvent(Object source, OperateStateEnum operateState) {
super(source);
this.operateState = operateState;
}
public OperateStateEnum getOperateState() {
return operateState;
}
}
----------------------------------------------------------------------------------------------------
package saas.crm.aprv.service.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import saas.crm.aprv.model.AprvDocument;
import saas.crm.aprv.model.AprvFlowItem;
import saas.crm.aprv.model.enums.OperateStateEnum;
import saas.crm.aprv.service.AprvDocumentReadService;
import saas.crm.aprv.service.util.AprvUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lee on 2016/10/18.
*/
@Component
public class AprvListener implements ApplicationListener<AprvEvent> {
@Autowired
AprvDocumentReadService aprvDocumentReadService;
@Override
public void onApplicationEvent(AprvEvent event) {
try {
nextProcessUnread(event);
} catch (Exception e) {
e.printStackTrace();
}
}
private void nextProcessUnread(AprvEvent event) throws ParseException {
OperateStateEnum operateState = event.getOperateState();
List<Long> unReadUserIds = new ArrayList<Long>();
long dbId = -1;
switch (operateState) {
case PASS:
case VETO:
case TURN:
case BACK: {
AprvFlowItem aprvFlowItem = (AprvFlowItem) event.getSource();
dbId = aprvFlowItem.getDbId();
String approverIds = aprvFlowItem.getApproverIds();
AprvUtils.addApproverIds(unReadUserIds, approverIds);
break;
}
case HANDLING:
case HANDLED: {
AprvDocument aprvDocument = (AprvDocument) event.getSource();
dbId = aprvDocument.getDbId();
unReadUserIds.add(aprvDocument.getUserId());
break;
}
default:
return ;
}
if(! unReadUserIds.isEmpty()) {
aprvDocumentReadService.updateReadCount(dbId, 0, unReadUserIds.toArray(new Long[unReadUserIds.size()]));
}
}
}
相关推荐
在本文中,我们将深入探讨Spring事件驱动模型,理解其工作原理,并通过源码分析来深化认识。 首先,Spring事件驱动模型是基于观察者模式实现的,即发布者(Publisher)发布事件,订阅者(Subscriber)监听并处理...
技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)
Spring事件处理基于发布/订阅模式,其中事件是消息的载体,而事件监听器则是对这些消息感兴趣的订阅者。在这个场景中,我们将探讨Spring MVC实例与Spring事件处理的结合。 首先,让我们了解Spring MVC。Spring MVC...
下面我们将深入探讨Spring事件处理的相关知识点。 首先,Spring事件是通过`ApplicationEvent`类来表示的。这是一个抽象基类,用于定义所有自定义事件。例如,如果你有一个用户注册的服务,你可能会创建一个`...
使用Spring事件机制实现异步的方法 Spring框架提供了一种事件机制,允许开发者将代码解耦合,实现松散耦合的设计理念。这里将详细介绍如何使用Spring事件机制实现异步的方法。 事件机制的实现主要包括三个部分:...
Spring事件主要涉及两个核心概念:事件发布(Event Publishing)和事件监听(Event Listening)。在这个"JAVA-spring学习资源之spring事件"中,我们将深入探讨这两个方面,并通过具体的示例来理解它们的工作原理。 ...
本篇文章将详细介绍Spring事件监听的三种方式:基于接口的监听器、基于类的监听器以及基于注解的监听器。 ### 1. 基于接口的监听器(ApplicationListener) **接口定义:** Spring提供了`ApplicationListener`接口...
Spring事件监听机制是Spring框架中的一个重要特性,它基于经典的观察者模式,允许应用程序组件之间进行松耦合的通信。在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(Application...
SpringBoot整合RabbitMQ之Spring事件驱动模型-系统源码数据库流程图 SpringBoot整合RabbitMQ实战视频教程:https://edu.csdn.net/course/detail/9314 (感兴趣也可以加QQ联系:1974544863)
接下来,我们将深入探讨Spring事件管理的核心概念和实现方式。 首先,Spring事件是基于Java的观察者模式(Observer Pattern)实现的,它定义了主题(Subject)和观察者(Observer)之间的关系,当主题的状态发生...
下面我们将详细探讨Spring事件监听机制的相关知识点。 1. **什么是Spring事件** Spring事件(ApplicationEvent)是Spring框架内建的一种轻量级消息传递机制。它基于Java的观察者模式,其中事件是被观察的对象,而...
本章将深入探讨Spring事件(Events)的相关知识点。 首先,Java事件/监听器编程模型是基于观察者模式的,该模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被...
在Spring事件机制中,`ApplicationContext`扮演了事件总线的角色,它负责维护所有已注册的监听器,并在事件发布时分发事件给这些监听器。这种设计模式使得Spring应用的组件间通信更加灵活,同时也降低了组件之间的...
在Spring框架中,`ApplicationContext`不仅是一个容器,用于管理Bean的生命周期和依赖注入,它还提供了事件发布和监听的功能。这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。...
本篇文章将深入探讨Spring的配置和事件注入机制,帮助开发者更好地理解和利用这些特性。 首先,让我们关注Spring的配置。Spring的配置主要有两种方式:XML配置和Java配置。在早期的Spring版本中,XML配置是最常用的...
Spring Boot+Spring Cloud 试题解析 Spring Boot 是一个基于 Java 的框架,...这些题目涵盖了 Spring Boot 和 Spring Cloud 的基础知识,包括配置文件的读取、日志框架的选择、热部署方式、事件机制、断路器的作用等。
Spring 事件 Application Event 原理详解 Spring 事件 Application Event 是 Spring 框架中的一种消息通信机制,用于实现 Bean 之间的消息传递。该机制基于观察者模式,允许一个 Bean 处理完一个任务之后,通知...
Spring的事件监听机制示例详解 事件监听机制是Spring Framework中的一种机制,它允许应用程序在特定的事件发生时执行...Spring事件机制是一种非常有用的机制,它能够帮助开发者实现解耦、提高系统的灵活性和扩展性。
首先,Spring事件是基于Java的`java.util.EventObject`类,它表示一个发生了的事件。Spring扩展了这个概念,创建了`org.springframework.context.ApplicationEvent`,它是所有Spring事件的基类。当你有一个特定业务...
以下将详细介绍Spring事件处理的核心概念、工作流程以及如何在实践中应用。 首先,Spring通过`ApplicationContextAware`接口提供了一种方式,使得Bean能够获取到ApplicationContext的引用。当一个Bean实现了这个...