`
rensanning
  • 浏览: 3553166 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38224
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607647
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682832
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89561
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402165
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69769
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91860
社区版块
存档分类
最新评论

Java Web项目中的Event

    博客分类:
  • Java
 
阅读更多
(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程序设计教程”旨在为学习者提供一个全面且深入的Java Web开发知识体系,帮助初学者及进阶者掌握在Web环境中使用Java进行开发的基本技能。 1. **Servlet**: Servlet是Java服务器端的小型应用程序,...

    java 制作 web 日历

    在Java Web开发中,制作一个交互式的日历组件可以极大地提升用户体验,特别是在记事本或者时间管理类应用中。这个项目的核心目标是创建一个可定制、样式灵活且功能丰富的日历视图。以下将详细解释如何使用Java实现这...

    java web 面试

    ### Java Web面试知识点详解 ... **知识点1:div横向排列** 在HTML中,`div`元素默认是...以上内容涵盖了Java Web面试中常见的重要知识点,深入理解这些概念和技术,将有助于提升开发者在Java Web开发领域的专业技能。

    Flex+Blazeds与Java_Web_Project整合(图解)

    本文将详细阐述如何将Flex和Blazeds整合到Java Web项目中,通过图解的方式帮助开发者快速理解并配置开发环境。 首先,我们需要下载BlazeDS,BlazeDS是Adobe开源的一个轻量级的消息中间件,它允许Flex客户端与Java...

    web项目使用websocket

    将包含WebSocket服务器端点类的Java Web项目打包成WAR文件,然后将其放入Tomcat的webapps目录下,启动Tomcat服务器即可运行此应用。 总结,WebSocket结合Tomcat可以构建高效的实时通信系统,通过在服务器端定义...

    购物车java项目

    在本项目中,"购物车java项目"是一个小型的Java应用程序,主要目的是模拟实际电子商务平台中的购物车系统。这个系统能够实现用户对购物车中商品的基本操作,包括添加商品、删除商品、修改商品数量以及查询购物车内...

    WEB项目集成Flex3功能

    对于习惯于Web项目开发的开发者而言,通常更倾向于选择将Flex功能集成到现有的Web项目中,而非独立开发Flex项目或者让两者完全分离。因此,本文将重点介绍如何在现有Web项目中添加Flex功能。 #### 开发环境准备 - ...

    JAVA WEB框架,java网站一个模块只用写一个文件

    JAVA WEB框架,java网站一个模块只用写一个文件 以前的servlet在现在的开发中已经不怎么常见,因为操作起来比较原始和麻烦。有些人就是不安于现状去改造它。 做得好的有Struts,Hybernate,Spring那么这些框架都是很...

    30天学通java-项目案例开发

    书中的每个章节都包含了丰富的实例和项目,以加深对Java概念的理解和应用。根据提供的压缩包子文件的文件名称列表,我们可以推测这可能涵盖了第7到第11章的内容,分别是chap07、chap06、chap11、chap09、chap08和...

    Javaweb仓库管理系统项目源码+数据库.zip

    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; ...

    JAVA整合WebSocket实现服务器消息推送项目源码

    以下将详细介绍WebSocket的核心概念、Java整合WebSocket的步骤以及在实际项目中的应用。 1. WebSocket简介: WebSocket协议是HTML5引入的一种在单个TCP连接上进行全双工通信的协议。它为客户端和服务器之间提供了一...

    Java_Web定时器使用

    下面通过具体示例代码进一步理解如何在Java Web环境中使用定时器。 ##### 4.1 定义监听器类 ```java public class TimerListener implements ServletContextListener { private Timer timer = null; private ...

    基于Java web的竞赛报名系统JavaWeb设计

    【Java Web 竞赛报名系统设计】 设计目标: 基于Java Web的竞赛报名系统旨在提供一个用户友好的...通过实际项目实践,学习者能够深入理解Web应用的开发流程,提高问题解决能力,为未来在IT行业中的发展打下坚实基础。

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx

    本篇主要关注的是Java Web开发中的过滤器、监听器和自定义标签。 1. **过滤器(Filter)**: - **过滤器**是Java Servlet API中的一种机制,它允许开发者在HTTP请求到达Servlet或JSP之前对其进行处理,也可以在...

    java管理员登陆界面

    import java.awt.event.*; ``` 这里导入了AWT库中的基本组件以及事件处理相关的包。 ##### 3.2 定义主类 ```java public class glydenglu extends Frame implements ActionListener ``` - **glydenglu** 类继承自 `...

    java applet

    Java Applet是Java技术在早期Web开发中使用的一种机制,它允许开发者创建可以在浏览器中运行的小型应用程序。这些小程序能够增强网页的交互性,提供动态内容和用户接口。本压缩包可能包含了一些示例代码、教程或者...

    java参照webcam-capture调用摄像头拍照

    Java调用摄像头拍照是计算机视觉应用中的一个常见需求,尤其在开发基于Web的应用时,例如视频会议、在线证件照拍摄等。本示例基于`webcam-capture`库,一个强大的Java库,允许开发者轻松地访问和控制电脑上的摄像头...

    stripe-event-service-java:捕获Stripe Web Hook事件的Spring Boot Java示例

    在 `stripe-event-service-java-master` 压缩包中,你应该能找到项目源代码。这个项目可能包含了以下组件: - `pom.xml`:Maven 构建文件,定义了项目的依赖,如 Spring Boot 和 Stripe 的 Java 客户端库。 - `...

Global site tag (gtag.js) - Google Analytics