`

Spring中事件处理的小技巧

阅读更多

Spring中事件处理的小技巧


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企业级项目开发-1期 08 Spring中事件处理的小技巧.doc

    在J2EE企业级项目开发中,理解并熟练运用Spring的事件处理小技巧至关重要。以下将详细介绍Spring事件处理的核心概念、工作流程以及如何在实践中应用。 首先,Spring通过`ApplicationContextAware`接口提供了一种...

    使用Spring Boot处理大文件上传有哪些技巧?

    在Spring Boot中处理大文件上传时,可以采用多种技巧以提高性能和用户体验。 通过配置CommonsMultipartResolver来设置文件大小限制,并创建文件存储服务来管理文件的保存和组合。分片上传是处理超大文件的关键,它...

    spring经典小案例

    在本篇中,我们将深入探讨基于Java的Spring框架的一个经典小案例,该案例涉及Spring与Hibernate及Struts的集成。Spring作为一个开源的应用框架,以其强大的依赖注入(Dependency Injection,DI)和面向切面编程...

    spring和mybatis整合小案例

    在IT行业中,Spring框架和MyBatis是两个非常重要的组件,它们在开发企业级Java应用时发挥着核心作用。...通过这个案例,开发者可以更好地理解和掌握Spring与MyBatis的整合技巧,提高开发效率,减少出错的可能性。

    spring boot 小实例

    在本小实例中,我们将基于 "Spring Boot in Action" 一书中的示例来探索 Spring Boot 的核心概念和实践应用。 首先,让我们理解 Spring Boot 的核心特性: 1. **起步依赖(Starters)**:Spring Boot 提供了一系列...

    SpringSecurity入门小demo(SSM+Spring Security)

    **Spring Security ...通过这个小 demo,你可以对 Spring Security 有初步的认识,了解如何在 SSM 项目中集成和配置它,为实际项目中的安全需求打下基础。继续深入学习,你将掌握更复杂的访问控制策略和定制化技巧。

    Spring Cloud微服务事务处理Demo

    在这个"Spring Cloud微服务事务处理Demo"中,我们将探讨如何在微服务环境中解决事务一致性问题。 首先,我们来看核心组件——Spring Boot。Spring Boot是基于Spring Framework的快速开发框架,它简化了Spring应用...

    springbatch 详解PDF附加 全书源码 压缩包

    通过阅读《Spring.Batch批处理框架.pdf》和源码,你将能够掌握 Spring Batch 的核心概念和实践技巧,为你的企业级应用开发带来高效、可靠的批量处理能力。同时,源码可以直接运行,提供了动手实践的机会,加深理解和...

    Java实际开发中的小技巧汇总

    在Java实际开发中,开发者经常会遇到各种挑战,需要掌握一些实用的小技巧来提高代码质量、提升效率。以下是一些从博客文章"Java实际开发中的小技巧汇总"中可能涵盖的知识点,结合“源码”和“工具”的标签,我们可以...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    附:内有弹出对话框,Action乱码处理和一些好技巧。 2008-5-28 修改: 今天修改了 applicationContext.xml,以后的事务控制就万事大吉了,里面有详细注释哦。 有什么问题可以给我留言 ^_^,大家一起进步! <!...

    spring security 3 多页面登录 小秘密小运气

    在"Spring Security 3 多页面登录 小秘密小运气"这个主题中,我们可以深入探讨Spring Security 3如何支持多个登录页面以及其中可能涉及的一些技巧和策略。 首先,Spring Security的核心功能包括身份验证、授权、...

    spring例子: jpetstore

    在压缩包文件名称 "springapp-petclinic" 中,"petclinic"可能是JPetStore的一个变体或者相关项目,通常Spring PetClinic是一个与JPetStore类似的学习资源,用于教授Spring Boot和Spring Data JPA等现代Spring技术。...

    spring-boot-demo

    本文将基于"spring-boot-demo"项目,深入解析Spring Boot的核心概念和实战技巧。 首先,"spring-boot-demo"项目是一个简单的小型示例,通常包含了一个基础的Spring Boot应用结构。这样的项目有助于我们理解Spring ...

    Druid+Spring示例

    【Druid数据库连接池】 Druid是阿里巴巴开源的一个高性能、高质量的Java数据库连接池组件,它的全称是Data Source Druid。...这个示例对于提升Java开发者的数据库连接池使用技巧和Spring框架应用能力具有很大帮助。

    Spring ActionScript 开发教程

    - **EventBus**:Spring ActionScript中的事件总线机制,用于处理应用程序中的事件分发和监听。 - **使用方法**:介绍如何利用EventBus发布事件、监听事件以及取消监听等操作。 #### 六、编译所需类的六种方式 - **...

    Spring Cookbook

    《Spring Cookbook》是一本专注于使用Spring框架开发Java Web应用程序的实用指南,它提供了超过100个实用的配方,...通过实践这些配方,读者可以逐步构建起对Spring框架的深入理解,掌握利用Spring进行高效开发的技巧。

    spring+boot+cookbook

    这本书详细介绍了Spring Boot的各种核心概念和实践技巧,涵盖了从基础入门到高级应用的方方面面。 1. **Spring Boot简介**:Spring Boot是Spring生态系统的一部分,旨在简化Spring应用的初始搭建以及开发过程。它...

    struts2+spring+ibatis的小demo

    在这个“struts2+spring+ibatis”的小demo中,我们将深入探讨这三个框架的核心功能以及它们如何协同工作。 **Struts2** 是一个强大的MVC(Model-View-Controller)框架,它提供了处理用户请求、控制应用程序流程的...

    Spring Portlet MVC参考文档(中文版)

    此文档基于Spring框架2.0.8版本的第16章翻译而来,旨在详细介绍Spring Portlet MVC的概念与原理,特别是框架内的关键组件与使用技巧,以助开发者深入了解并灵活应用。 **1.2 面向读者** 该文档主要面向具备一定JSR...

    restful结合spring实例,带有两个例子

    在IT行业中,RESTful是一种广泛...通过这两个例子,开发者可以深入理解RESTful设计原则,熟悉Spring MVC的使用,以及掌握构建高效、健壮的Web服务的技巧。在实际开发中,这样的技能对于构建现代、可扩展的API至关重要。

Global site tag (gtag.js) - Google Analytics