5.12.2 事件处理
通过 ApplicationEvent类和 ApplicationListener接口,可实现 ApplicationContext 的事件处理。如果容器中有一个 ApplicationListener bean,每当 ApplicationContext 发布ApplicationEvent时,ApplicationListenerbean将自动响应,这是标准的观察者模式。Spring 的事件框架有如下两个重要成员。
ApplicationEvent: 容器事件,必须由 ApplicationContext 发布。
ApplicationListener: 监听器,可由容器中的任何监昕器 bean 担任。
以下是个简单的容器事件类,该类继承 ApplicationEvent。代码如下:
public class EmailListEvent extends ApplicationEvent
{
public EmailListEvent(Object source)
{
super(source);
}
public EmailListEvent(Object source,String address,String text)
{
super(source);
this.address=address;
this.text = text;
|
下面是监昕器类,监听器类必须实现ApplicationListener接口。实现该接口必须实现一个方法:
voidonApplicationEvent(ApplicationEventevent)
|
每当容器内发生任何事件时,此方法都会被触发,监听器类的配置文件如下:
//监昕器类,实现ApplicationListener接口
public classEmailNotifier implementsApplicationListener
//实现 ApplicationListener接口必须实现的方法,该方法会在容器发生事件时自动触发
public void onApplicationEvent(ApplicationEvent evt)
//如果事件是程序触发的事件
if (evt instanceof EmailEvent)
//发送 E-mail通知...EmailEvent emailEvent = (EmailEvent)evt;
System.out.println("需要发送邮件的接收地址
+emailEvent.address);
System.out.println("需要发送邮件的邮件正文" + emailEvent.text);
}
else
//容器内置事件不作任何处理
System.out.println("容器本身的事件" + evt);
将监昕器配置在容器中,配置文件如下=
<?xml version="l.O" encoding="gb23l2"?>
<!指定 Spring 配置文件的dtd>
<lDOCTYPE beans PUBLIC"-//SPRiNG//DTDBEANIlEN"
''http://www.springframework.org/dtd/spri口g-beans.dtd">
<! --Spring配置文件的根元素一〉
<beans><!--配置监听器类-->
<bean id="emailListListener" class="lee.EmailNotifier"l>
</beans>
|
其主程序部分使用ApplicationContext的 publishEvent来发布事件:
public classSpringTest
public static void main(String[] args)
{
ApplicationContext ctx =newFileSystemXrnl
ApplicationContext("bean.xml");EmailEvent ele =
new EmailEvent("hello" , "kongyeeku@gmail.com",
"thisisatest");ctx.publishEvent(ele);
|
程序执行结果如下:
[java] 容器本身的事件。rg.springframework.context.event.ContextRefreshed
Event[source=org.springframework.context.support.FileSystemXrnlApplicationC
ontext: display name[org.springframework.context.
support.FileSystemXrnlApplicationContext;hashCode=76l5385];
startup date [Mon May 08 16:54:39 CST 2006]; root of contexthierarchy]
[java] 需要发送邮件的接收地址kongyeeku@gmail.com
[java] 需要发送邮件的邮件正文this is a test
|
此时监昕器不仅监昕到程序发布的事件,同时也监昕到容器内置的事件。
注意:如果 bean 想发布事件,则 bean 必须获得其容器的引用,应通过实现BeanFactoryAware接口达到此目的。
Spring提供了以下三个内置事件:
ContextRefreshedEven: ApplicationContext容器初始化或刷新触发该事件。
ContextClosedEvent: ApplicationContext容器关闭时触发该事件。
RequestHandledEvent: Web 相关的事件,只能应用于使用DispatcherServlet的 Web应用。
分享到:
相关推荐
此外,源码可能还包含了事件处理,如按钮点击事件,以控制扫描图的开始、暂停或保存等操作。QT的信号和槽机制是实现这种事件驱动编程的关键,它允许组件之间进行通信,例如,当用户点击“开始扫描”按钮时,信号会被...
3. 实现鼠标事件处理,如`mouseMoveEvent`、`mousePressEvent`和`mouseReleaseEvent`,根据不同的鼠标操作更新视图状态。 4. 可能还会有一个专门的数据加载模块,用于读取点云数据,例如从PCL(Point Cloud Library...
Qt Core:提供核心功能,如事件处理、定时器、文件处理等。 Qt GUI:提供用于创建和管理图形用户界面的工具和控件。 Qt Widgets:提供一套丰富的预制控件,如按钮、文本框、列表框等。 Qt Network:提供网络编程的...
SSCOM可能使用了事件驱动编程模型,监听串口事件,如数据到达、端口状态变化等,这可能涉及到多线程和异步处理。 5. **图形用户界面**: 源码可能包含使用GUI库(如Qt、WinAPI、wxWidgets等)创建的界面,用于...
第1章 什么是Java程序设计语言 1 1.1 Java语言诞生背景 1 1.2 Java语言的特点 1 ...C.2 Swing组件的事件处理 447 附录D JDBC程序设计简介 449 D.1 注册数据源 449 D.2 测试JDBC 450
总的来说,这个小型视频播放器项目涵盖了QT库的多媒体功能、图形用户界面设计、事件处理和跨平台开发等多个方面的知识。通过学习和分析这个项目,开发者不仅可以掌握QT的基本用法,还能深入了解如何构建一个实际的...
sr_dishdlr() 禁止事件处理句柄 228 sr_enbhdlr() 启用事件句柄函数 230 sr_getboardcnt() 取回指定类型的卡数目 232 sr_GetDllVersion() 取回SRL DLL的版本号 234 sr_getevtdatap() 取回事件关联数据的内存地址...
5.12.2 java i/o基本类库介绍 5.12.3 具体实现 5.13 获取file和cache的路径 5.14 wi-fi服务 5.14.1 wi-fi简介 5.14.2 实现原理 5.14.3 具体实现 5.15 获取sim卡内信息 5.15.1 sim卡简介 5.15.2 实现原理 5.15.3 ...
2. **qtbase**:基础Qt库,包含了Qt的主要功能,如事件处理、图形绘制、网络通信等。 3. **qtdeclarative**:Qt Quick模块,用于创建基于QML的用户界面,它提供了声明式的UI设计和JavaScript交互。 4. **qt...
这个实例展示了QT5的基本用法,如何处理用户交互以及如何与操作系统进行集成。QT5的灵活性和强大的功能使得开发者可以轻松地创建复杂的桌面应用,同时还能跨平台运行。通过深入学习QT5的其他组件和功能,如信号与槽...
5.12.2 有名管道的打开 5.12.3 管道的读和写 5.12.4 管道的关闭 5.12.5 例 5.13 系统调用dup 5.14 文件系统的安装和拆卸 5.14.1 在文件路径名中跨越安装点 5.14.2 文件系统的拆卸 5.15 系统调用link 5.16 ...
第8章 高性能服务器程序框架 8.1 服务器模型 8.1.1 CS模型 8.1.2 P2P模型 8.2 服务器编程框架 8.3 IO模型 8.4 两种高效的事件处理模式 8.4.1 Reactor模式 8.4.2 Proactor模式 8.4.3 模拟Proactor模式 8.5...
5.12.2 有名管道的打开 5.12.3 管道的读和写 5.12.4 管道的关闭 5.12.5 例 5.13 系统调用dup 5.14 文件系统的安装和拆卸 5.14.1 在文件路径名中跨越安装点 5.14.2 文件系统的拆卸 5.15 系统调用link 5.16 系统...
- **目标**: 提供全方位的服务管理,包括资源配置、资产管理、事件处理等多个方面。 - **功能**: 如配置管理、资产管理、工作台、事件管理等模块的设计与实现。 #### 四、智能化资源预报系统功能设计 **4.1 基础...
- 用于处理业务流程事件的函数。 **5.9 业务动作** - **5.9.1 全局的业务动作** - 可以在整个业务环境中使用的动作。 - **5.9.2 业务过程级的业务动作** - 适用于整个业务流程的动作。 - **5.9.3 业务环节级的...
Qt的核心特性包括事件驱动系统、图形渲染引擎、网络编程接口、数据库连接、XML处理、国际化和本地化支持,以及多媒体和OpenGL集成等。 在Qt5.12.10这个特定版本中,引入了一些关键改进和新特性。例如,对C++11标准...
1. **Core模块**:它是Qt的基础,提供数据类型、内存管理、线程支持、事件处理和日志记录等功能。例如,QObject类是所有Qt对象的基类,提供了信号与槽机制,这是Qt异步通信的关键。 2. **Gui模块**:提供图形用户...
事件处理机制使得设备能够响应各种外部触发事件,如移动检测等。 ##### 4.11 PTZ控制 PTZ(Pan/Tilt/Zoom)控制用于操作摄像头的水平旋转、垂直旋转和变焦功能。 ##### 4.12 视频分析 视频分析功能允许设备进行...
- **异常**: 当处理器检测到某些错误情况时触发的事件,如硬件故障、软件中断等。 **5.2 异常类型** - **硬件异常**: 如除法错误、非法指令等。 - **软件中断**: 如通过SWI指令发起的中断。 **5.3 异常优先级** ...
4.1.3 处理服务器控件的事件 84 4.2 给服务器控件应用样式 87 4.2.1 控件的常见属性 87 4.2.2 使用层叠样式表改变样式 88 4.3 HTML服务器控件 93 4.3.1 HtmlControl基类 95 4.3.2 HtmlContainerControl类 96 ...