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事件。

时间: 2024-12-01 14:32:10

Spring中事件处理的小技巧的相关文章

spring MVC的一些小技巧

spring MVC的一些小技巧 1,在controller中获取指定name的bean /*** * * @param request * @param beanName : 例如 userDao ,adminDao * @return */ public Object getBean(HttpServletRequest request,String beanName){ WebApplicationContext webApp=RequestContextUtils.getWebAppli

Excel2010在一个单元格中显示图表小技巧

  Excel2010在一个单元格中显示图表小技巧         步骤一.首先,打开Excel表格,然后鼠标左键单击选中需创建迷你图表的单元格,切换到"插入"功能选项卡中,在"迷你图"组中,单击一种迷你图表类型(目前只有3种迷你图:拆线图.柱线图.盈亏图)按钮(此处选择"柱形图"),打开"创建迷你图"对话框.如下图: Excel2010 步骤二.利用"位置范围"右侧的折叠按钮,选中显示迷你图表的单元格,单

Word中的阿拉伯数字小技巧

今天总结了一些Word中的阿拉伯数字小技巧供大家参考. 技巧一:将阿拉伯数字转换成大写数字 年终财务总结中的一些数字,按国人的习惯,通常用大写的格式表示,直接输入大写字符吧,比较麻烦.其实,我们可以用转换的方法来解决:直接输入阿拉伯数字(如57689),然后选中它们,执行"插入→数字"命令,打开"数字"对话框(如图1),选中"数字类型"下面的"壹.贰--"(或"一.二--")选项,"确定"

php eval函数用法 PHP中eval()函数小技巧_php技巧

eval 将值代入字符串之中. 语法: void eval(string code_str); 传回值: 无 函式种类: 数据处理 内容说明 本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上.参数 code_str 为欲处理的字符串.值得注意的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号.使用本函式处理后的字符串会沿续到 PHP 程序结束. 使用范例 复制代码 代码如下: <?php $string = '杯子'; $name = '咖啡'; $str = '这

在Excel中累加的小技巧

在使用Excel时,常常需要在已有数值的单元格中再增加或减去另一个数.一般是在计算器中计算后再覆盖原有的数据.这样操作起来很不方便.这里有一个小技巧,大家不妨一试. 1.创建一个宏. 选择Excel选单下的"工具→宏→录制新宏"选项; 宏名为:MyMicro; 快捷键为:Ctrl+Shift+J(只要不和 Excel本身的快捷键重名就行); 保存在:个人宏工作簿(可以在所有 Excel 工作簿中使用). 2.用鼠标选择"停止录入"工具栏中的方块,停止录入宏. 3.选

微信中那些实用小技巧 你造几个?

[TechWeb报道]当今微信与手机QQ已经成为腾讯旗下两大社交平台,他们之间的关系也逐渐从相似走上了差异化道路,这条路不仅任道而重远,而且在很多产品细节上都更加突出自己的特色.为形成这种差异化,两款产品也在不断的迭代,他们也存在着各自的使用小技巧.此前小编已经为大家细数过手机QQ的功能,下面小编就为大家细数一下手机QQ这款被称为腾讯基石的应用都有哪些容易被忽略的功能,让你更深入了解和利用它.1.跟朋友们感概两句很简单虽然纯文字已经成为朋友圈大家偶尔感概两句的常用功能,但仍有一些朋友,特别是刚刚

企业网站SEO优化中的一些小技巧

很高兴卓越SEO蓝天能给A5的朋友们带来一篇文章.今天这篇文章主要是说企业网站的SEO优化细节,好了啰嗦的话不多说我们进入正题. 1.企业搜索引擎关键词分布 我在查看竞争对手网站时发现很多Seoer都会把网站关键词链接堆积在网站的顶部或者是尾部,我觉得这其实很没必要,关键词尽量分布密集不要太大,堆积关键词在前几年就被google封杀了.把关键词分散开其实会大大提高搜索引擎的好感,也不会让搜索引擎认为作弊. 2.企业网站的文章如何写 一些朋友大多都会复制别人的文章进行修改后发布到自己的网站,这样的

Mac中音量调节小技巧介绍

  音量调节不为人知的小技巧 音量调节本来是一个很简单的动作,只是按按F11或F12来降低或增大音量就可以了,但这里也有两个小技巧: * 调节时静音:你一定会发现每次按F11或F12的时候都会伴随有一个音效,让用户知道当前的系统音量水平,这本来是一个很贴心的设计,但有时候环境很安静 的时候你可能不希望系统发出这样不和谐的声音,其实很简单,只要你按着Shift键不放,再去使用F11或F12调节音量,你就会发现系统不再在调节的同 时发声了- * 1/4格的调整:如果你单线用F11或F12去调节音量,

在Word中画横线小技巧

我们在使用Word制作一些试卷或者书籍的时候,用到最多的就是横线和下划线.虽说这是个不起眼的小操作,但是对于一些不常用Word的朋友来说是比较困难的. 第一种Word中画横线:利用"U"加下划线方法: 单击Word界面上的"U",然后按键盘上的空格键需要多长就按多少个空格,长度自己掌握. 第二种Word中画横线方法:利用绘图工具自制横线: ①单击菜单栏的"视图"-->工具栏-->将"绘图"勾选上;②选择绘图工具栏上