(1)Servlet的事件和监听器
*** Servlet、Filter、Listener 是单例的
*** 通过 @WebListener 或者 web.xml 来注册
(2)Spring 的 ApplicationEvent
引用
Publisher -> (ApplicationEvent) -> Listener
a)Spring内置事件
引用
ContextRefreshedEvent
ContextStartedEvent
ContextStoppedEvent
ContextClosedEvent
RequestHandledEvent
b)自定义事件
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
// 可以定义任意参数的构造函数,用于传递需要的参数
}
c)事件监听@EventListener、ApplicationListener
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 () {
}
d)发布事件ApplicationEventPublisher
@Autowired
private ApplicationEventPublisher eventPublisher;
eventPublisher.publishEvent(new MyEvent(this));
也可以通过在Listener中再次返回一个Event来继续发布一个事件,从而实现发布多个事件。
@EventListener
public MyAnotherEvent handleMyEvent(MyEvent event) {
// ... 处理MyEvent
return new MyAnotherEvent();
}
e)异步执行
Listener默认是在发布事件的线程中执行的。
通过@Async实现异步
把 @EventListener 标注的方法再标注 @Async 可实现异步执行。
通过ApplicationEventMulticaster实现异步
@Bean
ApplicationEventMulticaster applicationEventMulticaster() {
SimpleApplicationEventMulticaster eventMulticaster = new SimpleApplicationEventMulticaster();
eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
eventMulticaster.setErrorHandler(TaskUtils.LOG_AND_SUPPRESS_ERROR_HANDLER);
return eventMulticaster;
}
f)条件执行
从spring4.3开始正式提供基于 SpEL 来指定事件执行的条件
@EventListener(condition = "#myEvent.amount >= 100")
public void handleHighBids(MyEvent event) {
// ...
}
g)@TransactionalEventListener
同步事件监听是的事务问题
比如需要在事务正确提交后在执行监听:
@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
- 大小: 199.6 KB
分享到:
相关推荐
本教程“Java Web程序设计教程”旨在为学习者提供一个全面且深入的Java Web开发知识体系,帮助初学者及进阶者掌握在Web环境中使用Java进行开发的基本技能。 1. **Servlet**: Servlet是Java服务器端的小型应用程序,...
在Java Web开发中,制作一个交互式的日历组件可以极大地提升用户体验,特别是在记事本或者时间管理类应用中。这个项目的核心目标是创建一个可定制、样式灵活且功能丰富的日历视图。以下将详细解释如何使用Java实现这...
### Java Web面试知识点详解 ... **知识点1:div横向排列** 在HTML中,`div`元素默认是...以上内容涵盖了Java Web面试中常见的重要知识点,深入理解这些概念和技术,将有助于提升开发者在Java Web开发领域的专业技能。
本文将详细阐述如何将Flex和Blazeds整合到Java Web项目中,通过图解的方式帮助开发者快速理解并配置开发环境。 首先,我们需要下载BlazeDS,BlazeDS是Adobe开源的一个轻量级的消息中间件,它允许Flex客户端与Java...
将包含WebSocket服务器端点类的Java Web项目打包成WAR文件,然后将其放入Tomcat的webapps目录下,启动Tomcat服务器即可运行此应用。 总结,WebSocket结合Tomcat可以构建高效的实时通信系统,通过在服务器端定义...
在本项目中,"购物车java项目"是一个小型的Java应用程序,主要目的是模拟实际电子商务平台中的购物车系统。这个系统能够实现用户对购物车中商品的基本操作,包括添加商品、删除商品、修改商品数量以及查询购物车内...
对于习惯于Web项目开发的开发者而言,通常更倾向于选择将Flex功能集成到现有的Web项目中,而非独立开发Flex项目或者让两者完全分离。因此,本文将重点介绍如何在现有Web项目中添加Flex功能。 #### 开发环境准备 - ...
JAVA WEB框架,java网站一个模块只用写一个文件 以前的servlet在现在的开发中已经不怎么常见,因为操作起来比较原始和麻烦。有些人就是不安于现状去改造它。 做得好的有Struts,Hybernate,Spring那么这些框架都是很...
书中的每个章节都包含了丰富的实例和项目,以加深对Java概念的理解和应用。根据提供的压缩包子文件的文件名称列表,我们可以推测这可能涵盖了第7到第11章的内容,分别是chap07、chap06、chap11、chap09、chap08和...
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JComponent; import javax.swing.JFrame; ...
以下将详细介绍WebSocket的核心概念、Java整合WebSocket的步骤以及在实际项目中的应用。 1. WebSocket简介: WebSocket协议是HTML5引入的一种在单个TCP连接上进行全双工通信的协议。它为客户端和服务器之间提供了一...
下面通过具体示例代码进一步理解如何在Java Web环境中使用定时器。 ##### 4.1 定义监听器类 ```java public class TimerListener implements ServletContextListener { private Timer timer = null; private ...
【Java Web 竞赛报名系统设计】 设计目标: 基于Java Web的竞赛报名系统旨在提供一个用户友好的...通过实际项目实践,学习者能够深入理解Web应用的开发流程,提高问题解决能力,为未来在IT行业中的发展打下坚实基础。
本篇主要关注的是Java Web开发中的过滤器、监听器和自定义标签。 1. **过滤器(Filter)**: - **过滤器**是Java Servlet API中的一种机制,它允许开发者在HTTP请求到达Servlet或JSP之前对其进行处理,也可以在...
import java.awt.event.*; ``` 这里导入了AWT库中的基本组件以及事件处理相关的包。 ##### 3.2 定义主类 ```java public class glydenglu extends Frame implements ActionListener ``` - **glydenglu** 类继承自 `...
Java Applet是Java技术在早期Web开发中使用的一种机制,它允许开发者创建可以在浏览器中运行的小型应用程序。这些小程序能够增强网页的交互性,提供动态内容和用户接口。本压缩包可能包含了一些示例代码、教程或者...
Java调用摄像头拍照是计算机视觉应用中的一个常见需求,尤其在开发基于Web的应用时,例如视频会议、在线证件照拍摄等。本示例基于`webcam-capture`库,一个强大的Java库,允许开发者轻松地访问和控制电脑上的摄像头...
在 `stripe-event-service-java-master` 压缩包中,你应该能找到项目源代码。这个项目可能包含了以下组件: - `pom.xml`:Maven 构建文件,定义了项目的依赖,如 Spring Boot 和 Stripe 的 Java 客户端库。 - `...