Java Web项目中的Event

[b](1)Servlet的事件和监听器[/b]

[img]http://dl2.iteye.com/upload/attachment/0125/2759/3676c175-c965-3d13-bb81-b386e72503c3.png[/img]

*** Servlet、Filter、Listener 是单例的
*** 通过 @WebListener 或者 web.xml 来注册

[b](2)Spring 的 ApplicationEvent[/b]

[quote]Publisher -> (ApplicationEvent) -> Listener[/quote]

[b]a)Spring内置事件[/b]
[quote]ContextRefreshedEvent
ContextStartedEvent
ContextStoppedEvent
ContextClosedEvent
RequestHandledEvent[/quote]

[b]b)自定义事件[/b]
public class MyEvent extends ApplicationEvent {

public MyEvent(Object source) {
super(source);
}

// 可以定义任意参数的构造函数,用于传递需要的参数
}


[b]c)事件监听@EventListener、ApplicationListener[/b]

spring4.1之前:
public class MyListener1 implements ApplicationListener<ContextClosedEvent> {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
}
}


从spring4.2开始可以
public class MyListener2 {
@EventListener
public void processContextStoppedEvent(ContextStoppedEvent event) {
}
@EventListener
public void processContextClosedEvent(ContextClosedEvent event) {
}
}


也可以同时捕获多个事件
@EventListener({ContextRefreshedEvent.class, ContextStoppedEvent.class, ContextStartedEvent.class})
public void handleContextEvent () {
}


[b]d)发布事件ApplicationEventPublisher[/b]

@Autowired
private ApplicationEventPublisher eventPublisher;

eventPublisher.publishEvent(new MyEvent(this));


也可以通过在Listener中再次返回一个Event来继续发布一个事件,从而实现发布多个事件。
@EventListener
public MyAnotherEvent handleMyEvent(MyEvent event) {
// ... 处理MyEvent
return new MyAnotherEvent();
}


[b]e)异步执行[/b]

Listener默认是在发布事件的线程中执行的。

[b]通过@Async实现异步[/b]

把 @EventListener 标注的方法再标注 @Async 可实现异步执行。

[b]通过ApplicationEventMulticaster实现异步[/b]
@Bean
ApplicationEventMulticaster applicationEventMulticaster() {
SimpleApplicationEventMulticaster eventMulticaster = new SimpleApplicationEventMulticaster();
eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
eventMulticaster.setErrorHandler(TaskUtils.LOG_AND_SUPPRESS_ERROR_HANDLER);
return eventMulticaster;
}


[b]f)条件执行[/b]

从spring4.3开始正式提供基于 SpEL 来指定事件执行的条件
@EventListener(condition = "#myEvent.amount >= 100")
public void handleHighBids(MyEvent event) {
// ...
}



[b]g)@TransactionalEventListener[/b]

同步事件监听是的事务问题

比如需要在事务正确提交后在执行监听:
@TransactionalEventListener
public void handleAfterCommit(TaskScheduledEvent event)
// ...
}


或者指定在事务的某状态时执行监听:
@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)
public void handleAfterRollback(TaskScheduledEvent event) {
// ...
}



参考:
https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2
http://zoltanaltfatter.com/2016/05/11/application-events-with-spring/
http://kimulla.hatenablog.com/entry/2016/09/23/125006
Springboot+web3j(4.7)+实战+填坑 实现功能:获取合约event数据(相当于日志)。 中文文档 目前我找的比较好的文档是 汇智网 的,java以太坊库web3j文档 搭建项目 Springboot版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <vers 阅读详情

相关推荐

【智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例

客户端和web端对智能合约的事件Event进行调用的代码示例web truffle按官网的例子 http://truffleframework.com/boxes/pet-shoptruffle作为一个运行测试框架,用的也是web3对智能合约进行调用。文件所在的位置src/js/app.js initWeb3: function() { // web3入口 if (type

Code Metaverse 7597

【Spring】ApplicationListener 的介绍与使用

ApplicationListener 是监听 ApplicationContext 发出的事件响应,这是 Spring 提供的事件驱动机制。ApplicationListener 有内置事件和自定义事件两种。内置事件主要是围绕 ApplicationContext 生命周期触发的,而自定义事件相当于是我们自己定义的事件。

杜小舟的博客 2019

快速掌握 text/event-stream:开启实时通信新大门

Text/Event - Stream 是一种用于在 Web 应用程序中实现服务器推送(Server - Sent Events,SSE)的协议。它基于 HTTP 协议,允许服务器以流的形式向客户端发送数据。当浏览器收到带有响应头的 HTTP 响应时,会将响应解析为 SSE 流。

不会说话の猴子的博客 6528

ApplicationListener事件

2、ContextStartedEvent:当使用ApplicationContext的子接口(ConfigurableApplicationCntext)接口中的start方法时,触发的事件。3、ContextStoppedEvent:当使用ApplicationContext的子接口(ConfigurableApplicationCntext)接口中的stop方法时,触发的事件。ApplicationListener是spring提供的接口,作用是在启动时去加载某些程序。

qq_42696004的博客 1269

Java库实现:earthquake-event-ws-client搜索地震数据指南

本文还有配套的精品资源,点击获取 简介:earthquake-event-ws-client是一个Java库,为开发者提供了一个高效的接口来查询ANSS ComCat数据库,获取全球地震事件的详细信息。本文介绍如何利用该Java库提供的API进行地震数据检索,结构化处理返回数据,并应对可能出现的错误。同时,本文还将介绍如何管理依赖,利用示例代码和文档资源来帮助开发者构建地震...

weixin_42629522的博客 1167

sap外币重估流程图_SAP 外币评估方法(Valuation Method,评估方法)

在FI-GL模块评估外币时(T-code:F.05),需要输入ValuationMethod。下面分解一下评估方法是如何定义的。IMG -> FI -> General LedgerAccounting ->Business Transactions ->Closing ->Valuating -> ForeignCurrency Valuation ->...

weixin_39640543的博客 2356

Java 创建事件(Event)、事件监听器(EventListener)、事件发布(publishEvent)详解

在Java中,创建事件(Event)、事件监听器(EventListener)和事件发布(publishEvent)的工作原理涉及到观察者设计模式。这种设计模式用于实现对象之间的松耦合通信。事件(Event)相当于被观察对象,事件监听器(EventListener)相当于观察者。其中一个对象(事件源)维护一组依赖于它的对象(事件监听器),并在状态改变时通知它们。一般的,事件发布或事件监听后处理逻辑应该都是异步不阻塞线程。可以在发布时间或者事件监听方法上面加上@Async注解。

maple05的博客 5256

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

Java语言十五讲(第四讲 Event)

今天我们来谈一谈Java里面的Event事件机制。 程序的结构在不同的时代是在变化的。刚学编程序的时候,老师总会讲,程序是一个流程,线性执行,分支跳转,循环,有时候加上递归。我们总是能一步步跟踪下来,知道程序确切的运行次序。后来就会碰到事件的概念,程序先是准备好了,然后等待你做出某种反应,输入,键,鼠标,程序获取事件的消息,执行相关的动作。这种程序结构之下,不再有事先确定的运行次序了。刚开头遇到这种程序的时候,还真有点不习惯。印象最深刻的就是将近三十年前刚学到Windows编程的时候,看的第一个程序简直把

qqqqqqhhhhhh的博客 3911

SDM660电源部分配置:

SDM660电源部分配置: Panel power supplies 1、Reference power supplies Description Name Regulator Voltage (V) Panel power supply 0 vddio PMIC 660/L11 1.8 Panel power supply 1 Lab PMIC 660/lab 4.6 Panel power s...

weixin_41811215的博客 4729

JESD204B Subclass 1的SYSREF机制

SYSREF 是一个系统级同步脉冲信号,用于对齐 JESD204B 中的 LMFC(Local Multi-Frame Clock),从而实现每次建链的延迟一致性。核心点内容说明是系统参考跨多个芯片、多通道实现精确同步控制 LMFC决定所有设备的 LMFC 对齐点仅用于 Subclass 1是 JESD204B 实现确定性延迟的前提条件一般通过时钟芯片生成推荐使用 AD9528、LMK04828,支持 JESD204 专用输出建链过程中关键作用。

weixin_41230430的博客 1832

Apache Sling Event 支持:实时事件处理的开源之力

Apache Sling Event 支持:实时事件处理的开源之力 Apache Sling 的一个核心组件,Apache Sling Event,是专门设计用于提供事件通知和作业处理能力的框架,尤其适用于基于Java的Web应用和内容管理场景。 项目基础介绍 Apache Sling Event 使用Java作为其主编程语言,它是Apache Sling项目的一部分,旨在增强Sling实例之间的...

gitblog_01109的博客 375

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3276

thymeleaf获取id值_thymeleaf 获取sessionid

Redis整合Spring结合使用缓存实例(三)一.Redis介绍 什么是Redis? redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...PC-经典之&OpenCurlyDoubleQuote;运行里面的密密”msconfig.exe 你自己往里面输入这个字母就可以看到了,...

weixin_28913879的博客 639

Aurix TC3xx系列MCU ADC模块简介(一)

简单介绍英飞凌Aurix TC3xx系列单片机ADC模块的特点及内部结构。

m0_38045338的博客 6361

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 250

java jmonitor_GitHub - Bug-Maker/JMonitor: 仿CAT的分布式Java应用监控系统

JMonitor简介JMonitor是一个监控系统,用于多节点的Java应用程序的监控。它收集各个机器上的应用程序的信息,处理成报告,将报告存入mysql数据库,并可以在浏览器端展示。JMonitor系统结构JMonitor分为两部分:JMonitor-core和JMonitor-web。JMonitor-core为系统的核心部分,主要功能有:提供可供调用的系统API来产生消息,收集与处理消息,将...

weixin_30021053的博客 955

UG NX二次开发(C++)-NX2406系列二次开发编程模板配置

前面已经写了有关UG NX二次开发编程模板配置的文章,但是由于NX2406/2412系列的版本中,在UGOpen文件夹中没有了vs_files文件夹了,而是采用了VSIX Project的方式配置(其适用于VS2019),在VS2022中不能正确的配置。我结合以前配置模板的经验和现在的配置方式讲一下NX2406系列二次开发编程模板的配置。我把相应的编程模板放在资源文件UG NX二次开发编程模板(基于NX2406版本制作)中,方便大家下载使用。

GimiGimmy 2640

【web3j】java通过web3j监听并解析合约中的事件(event/emit)

java通过web3j监听并解析合约中的事件

藏进风里的博客 3610

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python与java 爬取网页event-stream数据

爬取网页event-stream数据

qq_39991410的博客 4848

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Event-Stream实时通信技术

WebSocket与Event-Stream(SSE)技术对比分析 WebSocket和Event-Stream(SSE)是两种常用的实时通信技术,各有特点。WebSocket支持全双工通信,适合复杂交互场景如聊天、游戏,但协议较复杂;SSE基于HTTP,仅支持服务器推送,适合简单场景如消息通知。在Java实现上,推荐采用Spring WebFlux的响应式方案,相比传统SseEmitter具有更好的性能和背压支持。WebFlux基于Reactor项目,提供Mono和Flux两种响应式类型,支持丰富的流操作

柯南小海盗 2017

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

CAT Java客户端完全指南:Transaction、Event、Metric埋点API详解

**CAT Java客户端**是接入 CAT 实时监控平台的核心入口。本文面向新手,用最少代码讲清三大埋点 API——`Cat.newTransaction()`、`Cat.logEvent()`、`Cat.logMetricForCount()`,带你快速完成应用的性能指标、健康状况与实时告警接入。 ## 一、动手前:Java 客户端安装与初始化 CAT 新版 Java 客户端位于 [lib

gitblog_00493的博客 1011

编程语言中的Class、Object、Property、attribute、field、Method、Event 【修订】

编程中的基本概念学习笔记 编程语言中的类(Class)对象(Object)属性(Property)事件(Event)方法(Method) "对象"(Object)就像我们在日常生活中所看到的各种物体,例如汽车、手机等等,而对象可能又是由许多对象组成,例如汽车是一种对象,而汽车又由发动机、车体、车轮等构成。在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods)。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例

cnds123的专栏 4492

java智能合约实例_【智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例...

客户端和web端对智能合约的事件Event进行调用的代码示例web truffle按官网的例子truffle作为一个运行测试框架,用的也是web3对智能合约进行调用。文件所在的位置src/js/app.jsinitWeb3: function() {// web3入口if (typeof web3 !== 'undefined') {App.web3Provider = web3.currentP...

weixin_39759995的博客 385

Java Web 中的 Server-Sent Events (SSE) 入门介绍

Server-Sent Events(服务器发送事件,简称 SSE)是一种用于实现服务器向客户端推送实时更新的技术。与 WebSocket 不同,SSE 是一种单向通信技术,适用于只需要从服务器到客户端的数据流场景。通过 SSE 技术,可以在 Java Web 应用中轻松实现服务器向客户端推送实时数据的功能。SSE 的实现简单且高效,特别适用于单向数据流场景。如果你需要更复杂的双向通信功能,则可以考虑使用 WebSocket。希望以上内容对你理解 Java Web 中的 SSE 实现有帮助!

zru_9602的博客 1728

CAT Java 客户端接入实战指南:从安装配置到 Transaction/Event/Metric 埋点

CAT(Central Application Tracking)作为美团点评开源的全链路监控平台,为 Java 生态提供了独立且成熟的客户端 SDK。本文以仓库 [lib/java/README.md](https://link.gitcode.com/i/57f1135932cf3141f1af3b83f450f419) 为骨架,完整讲解 Java 客户端的安装方式、初始化前置条件、`clie

gitblog_00571的博客 1051
上一篇: IT行业的各大排行榜
下一篇: JAXB实例入门
wayne_ren
博客等级 码龄21年 60粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值