`

spring事件

 
阅读更多

-----------

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事件驱动模型,理解其工作原理,并通过源码分析来深化认识。 首先,Spring事件驱动模型是基于观察者模式实现的,即发布者(Publisher)发布事件,订阅者(Subscriber)监听并处理...

    spring事件驱动 + 策略模式应用

    技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)

    spring 事件处理

    Spring事件处理基于发布/订阅模式,其中事件是消息的载体,而事件监听器则是对这些消息感兴趣的订阅者。在这个场景中,我们将探讨Spring MVC实例与Spring事件处理的结合。 首先,让我们了解Spring MVC。Spring MVC...

    spring事件的例子

    下面我们将深入探讨Spring事件处理的相关知识点。 首先,Spring事件是通过`ApplicationEvent`类来表示的。这是一个抽象基类,用于定义所有自定义事件。例如,如果你有一个用户注册的服务,你可能会创建一个`...

    使用Spring事件机制实现异步的方法

    使用Spring事件机制实现异步的方法 Spring框架提供了一种事件机制,允许开发者将代码解耦合,实现松散耦合的设计理念。这里将详细介绍如何使用Spring事件机制实现异步的方法。 事件机制的实现主要包括三个部分:...

    JAVA-spring学习资源之spring事件

    Spring事件主要涉及两个核心概念:事件发布(Event Publishing)和事件监听(Event Listening)。在这个"JAVA-spring学习资源之spring事件"中,我们将深入探讨这两个方面,并通过具体的示例来理解它们的工作原理。 ...

    spring 事件监听 3种方式

    本篇文章将详细介绍Spring事件监听的三种方式:基于接口的监听器、基于类的监听器以及基于注解的监听器。 ### 1. 基于接口的监听器(ApplicationListener) **接口定义:** Spring提供了`ApplicationListener`接口...

    深入探索Spring事件监听机制:技术与应用

    Spring事件监听机制是Spring框架中的一个重要特性,它基于经典的观察者模式,允许应用程序组件之间进行松耦合的通信。在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(Application...

    SpringBoot整合RabbitMQ之Spring事件驱动模型-系统源码数据库流程图

    SpringBoot整合RabbitMQ之Spring事件驱动模型-系统源码数据库流程图 SpringBoot整合RabbitMQ实战视频教程:https://edu.csdn.net/course/detail/9314 (感兴趣也可以加QQ联系:1974544863)

    Spring事件管理

    接下来,我们将深入探讨Spring事件管理的核心概念和实现方式。 首先,Spring事件是基于Java的观察者模式(Observer Pattern)实现的,它定义了主题(Subject)和观察者(Observer)之间的关系,当主题的状态发生...

    event.rar-Spring事件监听机制

    下面我们将详细探讨Spring事件监听机制的相关知识点。 1. **什么是Spring事件** Spring事件(ApplicationEvent)是Spring框架内建的一种轻量级消息传递机制。它基于Java的观察者模式,其中事件是被观察的对象,而...

    第十七章 Spring 事件(Events)1

    本章将深入探讨Spring事件(Events)的相关知识点。 首先,Java事件/监听器编程模型是基于观察者模式的,该模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被...

    spring事件机制

    在Spring事件机制中,`ApplicationContext`扮演了事件总线的角色,它负责维护所有已注册的监听器,并在事件发布时分发事件给这些监听器。这种设计模式使得Spring应用的组件间通信更加灵活,同时也降低了组件之间的...

    spring的Applicationcontext对事件的监听,实现类似MQ的效果

    在Spring框架中,`ApplicationContext`不仅是一个容器,用于管理Bean的生命周期和依赖注入,它还提供了事件发布和监听的功能。这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。...

    Spring的配置以及事件注入

    本篇文章将深入探讨Spring的配置和事件注入机制,帮助开发者更好地理解和利用这些特性。 首先,让我们关注Spring的配置。Spring的配置主要有两种方式:XML配置和Java配置。在早期的Spring版本中,XML配置是最常用的...

    spring笔试题选择和简答题和springboot+cloud选择题和简答题

    Spring Boot+Spring Cloud 试题解析 Spring Boot 是一个基于 Java 的框架,...这些题目涵盖了 Spring Boot 和 Spring Cloud 的基础知识,包括配置文件的读取、日志框架的选择、热部署方式、事件机制、断路器的作用等。

    Spring事件Application Event原理详解

    Spring 事件 Application Event 原理详解 Spring 事件 Application Event 是 Spring 框架中的一种消息通信机制,用于实现 Bean 之间的消息传递。该机制基于观察者模式,允许一个 Bean 处理完一个任务之后,通知...

    Spring的事件监听机制示例详解

    Spring的事件监听机制示例详解 事件监听机制是Spring Framework中的一种机制,它允许应用程序在特定的事件发生时执行...Spring事件机制是一种非常有用的机制,它能够帮助开发者实现解耦、提高系统的灵活性和扩展性。

    spring中监听事件

    首先,Spring事件是基于Java的`java.util.EventObject`类,它表示一个发生了的事件。Spring扩展了这个概念,创建了`org.springframework.context.ApplicationEvent`,它是所有Spring事件的基类。当你有一个特定业务...

    J2EE企业级项目开发-1期 08 Spring中事件处理的小技巧.doc

    以下将详细介绍Spring事件处理的核心概念、工作流程以及如何在实践中应用。 首先,Spring通过`ApplicationContextAware`接口提供了一种方式,使得Bean能够获取到ApplicationContext的引用。当一个Bean实现了这个...

Global site tag (gtag.js) - Google Analytics