Spring中提供一些Aware相关的接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到的是ApplicationContextAware。实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入 ApplicationContext的实例。ApplicationContextAware提供了publishEvent()方法,实现Observer(观察者)设计模式的事件传播机,提供了针对Bean的事件传播功能。通过Application.publishEvent方法,我们可以将事件通知系统内所有的ApplicationListener。
Spring事件处理一般过程:
public class MessageEvent extends ApplicationEvent {
/**
*
*/
private static final long serialVersionUID = 1L;
private String msg;
public MessageEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
public String getMessage() {
return msg;
}
}
public class Publisher implements ApplicationContextAware {
private ApplicationContext ctx;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.ctx = applicationContext;
}
public void publish(String message) {
ctx.publishEvent(new MessageEvent(this, message));
}
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
Publisher pub = (Publisher) ctx.getBean("publisher");
pub.publish("Hello World!");
pub.publish("The quick brown fox jumped over the lazy dog");
}
}
public class MessageEventListener implements ApplicationListener {
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof MessageEvent) {
MessageEvent msgEvt = (MessageEvent)event;
System.out.println("Received: " + msgEvt.getMessage());
}
}
}
在运行期,ApplicationContext会自动在当前的所有Bean中寻找ApplicationListener接口的实现,并将其作为事件接收对象。当Application.publishEvent方法调用时,所有的ApplicationListener接口实现都会被激发,每个ApplicationListener可根据事件的类型判断是否是自己需要处理的事件,如上面的ActionListener只处理ActionEvent事件。
定义Event类,继承org.springframework.context.ApplicationEvent.
编写发布事件类Publisher,实现org.springframework.context.ApplicationContextAware接口.
覆盖方法setApplicationContext(ApplicationContext applicationContext)和发布方法publish(Object obj)
定义时间监听类EventListener,实现ApplicationListener接口,实现方法onApplicationEvent(ApplicationEvent event).
本文转自:http://blog.csdn.net/jiqimiao/archive/2007/09/25/1799991.aspx
分享到:
相关推荐
【Spring Cloud微服务架构笔记(四)】 在微服务架构中,Spring Cloud Stream是一个关键组件,它为企业级开发提供了一种高效、灵活的消息处理机制。本文将深入探讨Spring Cloud Stream的功能、核心概念以及如何在...
在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理交给了Spring容器,使得开发者可以更专注于业务逻辑的实现,而非对象的生命周期管理。Spring_IOC(下)主要关注的是...
Spring Cloud Stream 支持多种 Binder 实现,如 RabbitMQ、Kafka、Kinesis、PubSub、Event Hubs 等,允许灵活地切换和扩展。 - 发布/订阅模型:Spring Cloud Stream 遵循发布-订阅模型,消息会被发送到一个共享主题...
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...
### Struts + Hibernate + Spring 技术整合学习笔记 #### 一、技术整合概述与应用场景 在企业级应用开发中,Struts + Hibernate + Spring(简称SSH)是一种非常流行的组合方式,它们各自承担着不同的角色,共同...
【Spring Boot Websocket详解】 Spring Boot 是一个快速开发框架,它简化了创建独立的、生产级别的基于Spring的应用程序。在Spring Boot中集成WebSocket技术,可以实现实时双向通信,为实时推送消息提供便利。本文...
2. **定义事件监听器**:可以通过实现`ApplicationListener`接口或使用`@EventListener`注解定义事件监听器。 3. **发布事件**:通过`ApplicationEventPublisher`接口发布事件。 ### 六、技术整合 除了以上基础...
- 主要的求职网站如Boss直聘 (https://www.zhipin.com/)、拉勾网 (https://www.lagou.com/) 和猎聘 (https://event.liepin.com/) 及阿里巴巴校园招聘 (https://campus.alibaba.com/index.htm) 提供了大量的职位信息...
- **@EventListener**:用于注解的方法,可以处理事件,简化事件监听器的编写。 #### 注解对比 - **@Resource**与**@Autowired**: - **@Resource**:默认按名称匹配,如果没有指定name,则使用字段名或方法名...
【Flex Parsley IOC框架笔记】 Flex Parsley是一个强大的Inversion of Control (IoC)框架,专为Adobe Flex和ActionScript开发者设计,它基于依赖注入和MVC(Model-View-Controller)开发模式,旨在简化Flex应用程序...
本学习笔记将深入探讨Activiti5的核心概念、主要功能以及如何在实际项目中应用。 一、Activiti5简介 Activiti5是由Alfresco公司开发的轻量级工作流引擎,基于BPMN 2.0标准,支持流程建模、执行和管理。它的设计目标...
### wxPython 学习笔记 #### 一、wxPython 概述 wxPython 是 Python 的一个 GUI 库,它允许开发者使用 Python 编写跨平台的桌面应用程序。它基于 C++ 开发的 wxWidgets 库,并提供了丰富的组件库,使得开发者能够...
文档说明可以查看 https://mp.csdn.net/mp_blog/creation/editor/131440166,里面有我写的笔记详细说明。记录对接sdk过程中的心得和经验以及遇到的一些小问题。 项目前端为uniapp,后端采用springboot。这里仅为后端...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
6. **数据一致性**:在分布式系统中,如何保证服务间的数据一致性,例如使用CAP理论、Event Sourcing和CQRS(命令查询职责分离)等策略。 7. **持续集成/持续部署(CI/CD)**:Jenkins、GitLab CI/CD等工具实现自动化...
接下来,"activitiSSHDemo完整版.zip"是一个完整的项目实战案例,其中融入了SSH(Spring、Struts2、Hibernate)框架,展示了如何将Activiti与实际业务系统整合。这个案例涵盖了用户登录、流程启动、任务查询、任务...
流程定义包括了任务(Task)、事件(Event)、网关(Gateway)和泳道(Lane)等元素,它们组合起来构建出流程图,使得非技术人员也能理解流程的运作方式。 ### 2. **流程建模** jBPM提供了基于Eclipse的集成开发...
- **非框架特性:** 不同于 Spring Boot 或其他 Java 框架,Vert.x 是一个工具集合,提供了一组强大的 API 来构建响应式应用,而不是定义应用程序的结构或打包方式。 **1.2 响应式系统的四个关键特征** - **响应性...