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

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网站一个模块只用写一个文件

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

    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抽奖活动大转盘(含前后端源码、数据库脚本, 抽奖算法)支持一键运行

    1、采用Java语言开发,集成SpringBoot,Redis、Mybatis,SpringEvent、Maven,项目 2、包含前端、后端源码,数据库设计、SQL脚本,抽奖算法如果没有实现思路,这是一个很好的入门案例。

    webServer web服务器

    import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax....

    java编写用户登录

    package edu.njust.cs; import javax.swing.*;...import java.awt.event.*; import edu.njust.cs.*; import javax.swing.JOptionPane; public class LoginDialog extends JDialog implements ActionListener{ ... }

    Practical JSF in Java EE 8 pdf

    Next, you add JSF event handling and then link to a database, persist data, and add security and the other bells and whistles that the Java EE 8 platform has to offer. After reading this book you ...

    maven-archetype-eventsourcing:这个原型使用Event Sourcing,Angular和Spring创建一个有效的Java项目

    该原型使用以下技术创建Java Web应用程序: 该存储库还在/myapp文件夹中包含一个事件源示例项目。 用法 使用Maven-archetype-eventsourcing创建项目 mvn archetype:generate -DarchetypeGroupId=no.bouvet -...

    Java.EE.7.Essentials

    View and Delete Movies (Java API for RESTful Web Services) Add Movie (Java API for JSON Processing) Ticket Sales (Batch Applications for the Java Platform) Movie Points (Java Message Service 2) ...

    Javascript教程--从入门到精通【完整版】_java教程_javascript_event_js_源码

    javascript教程 JavaScript 是一种基于对象...使用它的目的是与HTML 超文本标记语言、Java 脚本语言(Java 小程序)一起实现在一个 Web 页面中链接多个对象,与 Web 客户交互作用。从而可以开发客户端的应用程序等

    zkstudio_2.0.0_indigo JAVA Web前端框架

    ZK是一套以 AJAX/XUL/Java 为基础的网页应用程式开发框架,用于丰富网页应用程式的使用接口。最大的好处是,在设计AJAX网络应用程式时,轻松简便的操作就像设计桌面程式一样。 ZK包含了一个以AJAX为基础、事件驱动...

    Javascript简体中文JAVA教程

    使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的...

    java7帮助文档

    This release contains Java API for XML Processing (JAXP) 1.4.5, supports Java Architecture for XML Binding (JAXB) 2.2.3, and supports Java API for XML Web Services (JAX-WS) 2.2.4. ...

    SDKjAVA_大华sdk视频_大华javasdk_

    读取大华sdk下载,视频比较全面,winform版本的

    Java 简单的窗口+菜单栏

    addEventHandler(); } public void addItem(){ items[0]=new JMenuItem[5]; file.add(items[0][0]=new JMenuItem("新建")); file.add(items[0][1]=new JMenuItem("打开...")); file.addSeparator(); file....

    类qq聊天工具

    21. import java.awt.event.ComponentEvent; 22. import java.awt.event.MouseAdapter; 23. import java.awt.event.MouseEvent; 24. import java.awt.event.WindowAdapter; 25. import java.awt.event....

    超轻量压缩传输js2java rpc框架(XtZPStream v1.0)

    1、JS2Java RPC:能够在javascript的web浏览器环境中指定java类,获取该类实例的属性, 调用该实例的方法 2、支持复杂js对象作为入参:能够传递复杂的JavaScript Object对象作为调用参数, 在java中得到对应的Map...

    JAVA核心技术

    基于XML,基于XSP(通俗地说,XSP是在XML静态文档中加入Java程序段后形成的动态XML文档。)。特点是可以与多种数据源交互,包括文件系统,数据库,LDAP,XML资源库,网络数据源等。??免费。??ECHO:??主要应用方面:...

    JAVA设计界面的程序设计

    import java.awt.event.*; /** * Sample application using Frame. * * @author * @version 1.00 11/05/04 */ public class Pj1Frame extends Frame { /** * The constructor. */ public Pj1Frame() {...

    extra-event:java的刺激反射(事件)库

    java-spine可用于Java 6+ ,并可用于Desktop 、 Web或Mobile (Android) 。 概念 或脊椎是我们身体中连接的一组思维骨骼。 我们知道它是把我们的手从热的物体上拉回来的人,或者是从锋利的石头上拉我们的腿的人。 它...

    Manning - Play for Java 2014

    With Play you get the power of Scala's strong type system and functional programming model, and a rock-solid Java API that makes it a snap to create stateless, event-driven, browser-based ...

Global site tag (gtag.js) - Google Analytics