(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网站一个模块只用写一个文件 以前的servlet在现在的开发中已经不怎么常见,因为操作起来比较原始和麻烦。有些人就是不安于现状去改造它。 做得好的有Struts,Hybernate,Spring那么这些框架都是很...
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; ...
1、采用Java语言开发,集成SpringBoot,Redis、Mybatis,SpringEvent、Maven,项目 2、包含前端、后端源码,数据库设计、SQL脚本,抽奖算法如果没有实现思路,这是一个很好的入门案例。
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....
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{ ... }
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 ...
该原型使用以下技术创建Java Web应用程序: 该存储库还在/myapp文件夹中包含一个事件源示例项目。 用法 使用Maven-archetype-eventsourcing创建项目 mvn archetype:generate -DarchetypeGroupId=no.bouvet -...
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教程 JavaScript 是一种基于对象...使用它的目的是与HTML 超文本标记语言、Java 脚本语言(Java 小程序)一起实现在一个 Web 页面中链接多个对象,与 Web 客户交互作用。从而可以开发客户端的应用程序等
ZK是一套以 AJAX/XUL/Java 为基础的网页应用程式开发框架,用于丰富网页应用程式的使用接口。最大的好处是,在设计AJAX网络应用程式时,轻松简便的操作就像设计桌面程式一样。 ZK包含了一个以AJAX为基础、事件驱动...
使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的...
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. ...
读取大华sdk下载,视频比较全面,winform版本的
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....
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....
1、JS2Java RPC:能够在javascript的web浏览器环境中指定java类,获取该类实例的属性, 调用该实例的方法 2、支持复杂js对象作为入参:能够传递复杂的JavaScript Object对象作为调用参数, 在java中得到对应的Map...
基于XML,基于XSP(通俗地说,XSP是在XML静态文档中加入Java程序段后形成的动态XML文档。)。特点是可以与多种数据源交互,包括文件系统,数据库,LDAP,XML资源库,网络数据源等。??免费。??ECHO:??主要应用方面:...
import java.awt.event.*; /** * Sample application using Frame. * * @author * @version 1.00 11/05/04 */ public class Pj1Frame extends Frame { /** * The constructor. */ public Pj1Frame() {...
java-spine可用于Java 6+ ,并可用于Desktop 、 Web或Mobile (Android) 。 概念 或脊椎是我们身体中连接的一组思维骨骼。 我们知道它是把我们的手从热的物体上拉回来的人,或者是从锋利的石头上拉我们的腿的人。 它...
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 ...