博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 中的事件处理
阅读量:7298 次
发布时间:2019-06-30

本文共 2114 字,大约阅读时间需要 7 分钟。

hot3.png

Spring 中的事件处理

你已经看到了在所有章节中 Spring 的核心是 ApplicationContext,它负责管理 beans 的完整生命周期。当加载 beans 时,ApplicationContext 发布某些类型的事件。例如,当上下文启动时,ContextStartedEvent 发布,当上下文停止时,ContextStoppedEvent 发布。

通过 ApplicationEvent 类和 ApplicationListener 接口来提供在 ApplicationContext 中处理事件。如果一个 bean 实现 ApplicationListener,那么每次 ApplicationEvent 被发布到 ApplicationContext 上,那个 bean 会被通知。

序号

Spring 内置事件 & 描述

1

ContextRefreshedEvent

ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext 接口中使用 refresh() 方法来发生。

2

ContextStartedEvent

当使用 ConfigurableApplicationContext 接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。

3

ContextStoppedEvent

当使用 ConfigurableApplicationContext 接口中的 stop() 方法停止 ApplicationContext 时,发布这个事件。你可以在接受到这个事件后做必要的清理的工作。

4

ContextClosedEvent

当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。

5

RequestHandledEvent

这是一个 web-specific 事件,告诉所有 bean HTTP 请求已经被服务。

由于 Spring 的事件处理是单线程的,所以如果一个事件被发布,直至并且除非所有的接收者得到的该消息,该进程被阻塞并且流程将不会继续。因此,如果事件处理被使用,在设计应用程序时应注意。

监听上下文事件

为了监听上下文事件,一个 bean 应该实现只有一个方法 onApplicationEvent() 的 ApplicationListener 接口。因此,我们写一个例子来看看事件是如何传播的,以及如何可以用代码来执行基于某些事件所需的任务。

让我们在恰当的位置使用 Eclipse IDE,然后按照下面的步骤来创建一个 Spring 应用程序:

public class CStartEventHandler    implements ApplicationListener
{ //容器启动事件 public void onApplicationEvent(ContextStartedEvent event) { System.out.println("ContextStartedEvent Received"); }}

 

public class CStopEventHandler    implements ApplicationListener
{ public void onApplicationEvent(ContextStoppedEvent event) { System.out.println("ContextStoppedEvent Received"); }}
public class MainApp {   public static void main(String[] args) {      ConfigurableApplicationContext context =       new ClassPathXmlApplicationContext("Beans.xml");      // Let us raise a start event.      context.start();      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");      obj.getMessage();      // Let us raise a stop event.      context.stop();   }}

 

 

转载于:https://my.oschina.net/u/3908739/blog/1859329

你可能感兴趣的文章
python之正则表达式
查看>>
Shell命令-文件及目录操作之touch、tree
查看>>
修改K/3 Cloud管理中心端口
查看>>
C#语言课程11月7日
查看>>
linux日常1-踢出用户
查看>>
MFC多文档应用程序同时显示两个视图
查看>>
github快速入门(一)
查看>>
PHP全栈开发(八):CSS Ⅸ dispaly & visibility
查看>>
正则表达式
查看>>
【Oracle 12c】最新CUUG OCP-071考试题库(56题)
查看>>
C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码...
查看>>
实验二
查看>>
简单安装ubuntu
查看>>
20160331javaweb 之JSP page 指令
查看>>
用Ruby批量获取电影的评分与影片信息
查看>>
2019.5.29 区块链论文翻译
查看>>
Centos6.6安装mysql记录
查看>>
OCP读书笔记(5) - 使用RMAN创建备份
查看>>
java的接口和抽象类区别
查看>>
能够提高PHP的性能的一些注意事项
查看>>