博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的事件发布机制
阅读量:7072 次
发布时间:2019-06-28

本文共 2545 字,大约阅读时间需要 8 分钟。

一:Spring的事件发布

    ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现ApplicationListener接口)。

    ApplicationContext这个接口,是Spring的上下文,通常获取Bean就需要这个接口,这个接口并不是直接继承于BeanFactory,其中最著名的是直接继承了ApplicationPublisher接口,这个接口查看源码可以发现:只有一个方法,那就是主角 void publishEvent(ApplicationEvent event);

    Spring提供的基于Aware相关的接口有ApplicationContextAware,ResourceloaderAware,ServletContextAware(注意:Struts2也有这个接口,注意区分),最常用的就这三个,而Spring的事件发布机制需要用到ApplicationContextAware接口。

    实现了ApplicationContextAware的Bean,在Bean初始化时将会被注入ApplicationContext实例(因为这个接口里有set(ApplictationContext ctx)方法)

二:有了以上基础,看示例代码:

1.首先创建事件类 TradeEvent

package net.wang.test;import org.springframework.context.ApplicationEvent;/** * 事件Event * @author LiuRuoWang */public class TradeEvent extends ApplicationEvent{		public TradeEvent(Object source) {		super(source);		System.out.println("事件:TradeEvent event !!");	}	}
 
 
package net.wang.test;import org.springframework.context.ApplicationEventPublisher;import org.springframework.context.ApplicationEventPublisherAware;/** * 事件的发布者 * @author LiuRuoWang */public class HelloWorld implements ApplicationEventPublisherAware{		private String word;		public void setWord(String word) {		this.word = word;	}		private ApplicationEventPublisher tradeEventPublisher;		public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {		this.tradeEventPublisher=applicationEventPublisher;	}		public void say(){		System.out.println("say:"+this.word);		TradeEvent tradeEvent = new TradeEvent(new String("HelloWorld!")); 		this.tradeEventPublisher.publishEvent(tradeEvent);	}	}
其中在say()方法里发布了事件
 
3.最后编写 事件的接收者EventReceiver:
package net.wang.test;import org.springframework.context.ApplicationListener;/** * 事件的接收者 * @author LiuRuoWang */public class EventReceiver implements ApplicationListener
{ public void onApplicationEvent(TradeEvent event) { System.out.println("监听到的事件:"+event.getSource()); }}
事件的接收者其实是一个监听器,必须实现ApplicationListener,注意把事件TradeEvent直接写到泛型中
 
4.applicationContext.xml:

注意把事件的接收者写入配置文件中

5.测试Test:

package net.wang.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {	public static void main(String[] args) {		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");		HelloWorld h = (HelloWorld) ctx.getBean("helloWrold");		h.say();	}}

6.结果显示:

 

结果中已经显示监听到的事件,说明成功。

转载于:https://www.cnblogs.com/liuruowang/p/4542739.html

你可能感兴趣的文章
我的友情链接
查看>>
云端高手答疑解惑 助您开启智慧人生
查看>>
用Cronjob定时备份数据库并发送至邮箱
查看>>
智能DNS系统wddns 1.5发布同时提供免费智能解析
查看>>
互斥锁(排它锁、独占锁、写锁、X锁)和共享锁(读锁、S锁) 自旋锁
查看>>
InnoDB 引擎独立表空间 innodb_file_per_table 拆分ibdata
查看>>
Disabled form inputs do not appear in the request
查看>>
笔试题集锦
查看>>
求两个数中二进制位不同的个数
查看>>
Java使用JDBC方式连接数据库
查看>>
Android 定时器实现方式
查看>>
Android开发 - 设置DialogFragment全屏显示
查看>>
Linux的基础知识学习
查看>>
UART串口通讯的根本使用
查看>>
nginx-rtmp-module 执行流程
查看>>
怎么从Linux服务器上下载超过4G的文件?
查看>>
linux运维基础篇 unit13
查看>>
无线WIFI上网监控串联部署方案
查看>>
运营管理中如何实现对超流量用户的管理。
查看>>
微信企业付款到个人钱包引发的坑之反思~
查看>>