Spring中提供一些Aware相关的接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到的是ApplicationContextAware。实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入 ApplicationContext的实例。ApplicationContextAware提供了publishEvent()方法,实现Observer(观察者)设计模式的事件传播机,提供了针对Bean的事件传播功能。通过Application.publishEvent方法,我们可以将事件通知系统内所有的ApplicationListener。
Spring事件处理一般过程:
·定义Event类,继承org.springframework.context.ApplicationEvent.
·编写发布事件类Publisher,实现org.springframework.context.ApplicationContextAware接口.
·覆盖方法setApplicationContext(ApplicationContext applicationContext)和发布方法publish(Object obj)
·定义时间监听类EventListener,实现ApplicationListener接口,实现方法onApplicationEvent(ApplicationEvent event).
java 代码
import org.springframework.context.ApplicationEvent;
/** * 定义事件信息 * @author new * */ public class MessageEvent extends ApplicationEvent {
private String message;
public void setMessage(String message){ this.message = message; }
public String getMessage(){ return message; }
public MessageEvent(Object source, String message) { super(source); this.message = message; // TODO Auto-generated constructor stub }
private static final long serialVersionUID = 1L; } |
java 代码
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Publisher implements ApplicationContextAware {
private ApplicationContext context;
@Override public void setApplicationContext(ApplicationContext arg0) throws BeansException { // TODO Auto-generated method stub this.context = arg0; }
public void publish(String message){ context.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"); } } |
java 代码
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener;
public class MessageEventListener implements ApplicationListener {
@Override public void onApplicationEvent(ApplicationEvent event) { // TODO Auto-generated method stub if(event instanceof MessageEvent){ MessageEvent msEvent = (MessageEvent)event; System.out.println("Received: " + msEvent.getMessage()); } } } |
在运行期,ApplicationContext会自动在当前的所有Bean中寻找ApplicationListener接口的实现,并将其作为事件接收对象。当Application.publishEvent方法调用时,所有的ApplicationListener接口实现都会被激发,每个ApplicationListener可根据事件的类型判断是否是自己需要处理的事件,如上面的ActionListener只处理ActionEvent事件。
|
相关推荐
在J2EE企业级项目开发中,理解并熟练运用Spring的事件处理小技巧至关重要。以下将详细介绍Spring事件处理的核心概念、工作流程以及如何在实践中应用。 首先,Spring通过`ApplicationContextAware`接口提供了一种...
在本篇中,我们将深入探讨基于Java的Spring框架的一个经典小案例,该案例涉及Spring与Hibernate及Struts的集成。Spring作为一个开源的应用框架,以其强大的依赖注入(Dependency Injection,DI)和面向切面编程...
在IT行业中,Spring框架和MyBatis是两个非常重要的组件,它们在开发企业级Java应用时发挥着核心作用。...通过这个案例,开发者可以更好地理解和掌握Spring与MyBatis的整合技巧,提高开发效率,减少出错的可能性。
在本小实例中,我们将基于 "Spring Boot in Action" 一书中的示例来探索 Spring Boot 的核心概念和实践应用。 首先,让我们理解 Spring Boot 的核心特性: 1. **起步依赖(Starters)**:Spring Boot 提供了一系列...
**Spring Security ...通过这个小 demo,你可以对 Spring Security 有初步的认识,了解如何在 SSM 项目中集成和配置它,为实际项目中的安全需求打下基础。继续深入学习,你将掌握更复杂的访问控制策略和定制化技巧。
通过阅读《Spring.Batch批处理框架.pdf》和源码,你将能够掌握 Spring Batch 的核心概念和实践技巧,为你的企业级应用开发带来高效、可靠的批量处理能力。同时,源码可以直接运行,提供了动手实践的机会,加深理解和...
在Java实际开发中,开发者经常会遇到各种挑战,需要掌握一些实用的小技巧来提高代码质量、提升效率。以下是一些从博客文章"Java实际开发中的小技巧汇总"中可能涵盖的知识点,结合“源码”和“工具”的标签,我们可以...
附:内有弹出对话框,Action乱码处理和一些好技巧。 2008-5-28 修改: 今天修改了 applicationContext.xml,以后的事务控制就万事大吉了,里面有详细注释哦。 有什么问题可以给我留言 ^_^,大家一起进步! <!...
在"Spring Security 3 多页面登录 小秘密小运气"这个主题中,我们可以深入探讨Spring Security 3如何支持多个登录页面以及其中可能涉及的一些技巧和策略。 首先,Spring Security的核心功能包括身份验证、授权、...
在压缩包文件名称 "springapp-petclinic" 中,"petclinic"可能是JPetStore的一个变体或者相关项目,通常Spring PetClinic是一个与JPetStore类似的学习资源,用于教授Spring Boot和Spring Data JPA等现代Spring技术。...
本文将基于"spring-boot-demo"项目,深入解析Spring Boot的核心概念和实战技巧。 首先,"spring-boot-demo"项目是一个简单的小型示例,通常包含了一个基础的Spring Boot应用结构。这样的项目有助于我们理解Spring ...
【Druid数据库连接池】 Druid是阿里巴巴开源的一个高性能、高质量的Java数据库连接池组件,它的全称是Data Source Druid。...这个示例对于提升Java开发者的数据库连接池使用技巧和Spring框架应用能力具有很大帮助。
- **EventBus**:Spring ActionScript中的事件总线机制,用于处理应用程序中的事件分发和监听。 - **使用方法**:介绍如何利用EventBus发布事件、监听事件以及取消监听等操作。 #### 六、编译所需类的六种方式 - **...
在这个"Spring Cloud微服务事务处理Demo"中,我们将探讨如何在微服务环境中解决事务一致性问题。 首先,我们来看核心组件——Spring Boot。Spring Boot是基于Spring Framework的快速开发框架,它简化了Spring应用...
《Spring Cookbook》是一本专注于使用Spring框架开发Java Web应用程序的实用指南,它提供了超过100个实用的配方,...通过实践这些配方,读者可以逐步构建起对Spring框架的深入理解,掌握利用Spring进行高效开发的技巧。
这本书详细介绍了Spring Boot的各种核心概念和实践技巧,涵盖了从基础入门到高级应用的方方面面。 1. **Spring Boot简介**:Spring Boot是Spring生态系统的一部分,旨在简化Spring应用的初始搭建以及开发过程。它...
在这个“struts2+spring+ibatis”的小demo中,我们将深入探讨这三个框架的核心功能以及它们如何协同工作。 **Struts2** 是一个强大的MVC(Model-View-Controller)框架,它提供了处理用户请求、控制应用程序流程的...
在IT行业中,RESTful是一种广泛...通过这两个例子,开发者可以深入理解RESTful设计原则,熟悉Spring MVC的使用,以及掌握构建高效、健壮的Web服务的技巧。在实际开发中,这样的技能对于构建现代、可扩展的API至关重要。