转贴处 http://www.blogjava.net/improviser/archive/2007/09/24/147914.html
Spring中提供一些Aware相关的接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到的是ApplicationContextAware。实现ApplicationContextAware的Bean,在Bean被初始后,将会被注入 ApplicationContext的实例。ApplicationContextAware提供了publishEvent()方法,实现Observer(观察者)设计模式的事件传播机,提供了针对Bean的事件传播功能。通过Application.publishEvent方法,我们可以将事件通知系统内所有的ApplicationListener。
Spring事件处理一般过程:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->1publicclassMessageEventextendsApplicationEvent{
2/**
3*
4*/
5privatestaticfinallongserialVersionUID=1L;
6privateStringmsg;
7publicMessageEvent(Objectsource,Stringmsg){
8super(source);
9this.msg=msg;
10}
11
12publicStringgetMessage(){
13returnmsg;
14}
15}
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->1publicclassPublisherimplementsApplicationContextAware{
2
3privateApplicationContextctx;
4
5publicvoidsetApplicationContext(ApplicationContextapplicationContext)
6throwsBeansException{
7this.ctx=applicationContext;
8
9}
10
11publicvoidpublish(Stringmessage){
12ctx.publishEvent(newMessageEvent(this,message));
13}
14
15publicstaticvoidmain(String[]args){
16ApplicationContextctx=newFileSystemXmlApplicationContext(
17"src/applicationContext.xml");
18
19Publisherpub=(Publisher)ctx.getBean("publisher");
20pub.publish("HelloWorld!");
21pub.publish("Thequickbrownfoxjumpedoverthelazydog");
22}
23
24}
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->1publicclassMessageEventListenerimplementsApplicationListener{
2
3publicvoidonApplicationEvent(ApplicationEventevent){
4if(eventinstanceofMessageEvent){
5MessageEventmsgEvt=(MessageEvent)event;
6System.out.println("Received:"+msgEvt.getMessage());
7}
8}
9}
在运行期,ApplicationContext会自动在当前的所有Bean中寻找ApplicationListener接口的实现,并将其作为事件接收对象。当Application.publishEvent方法调用时,所有的ApplicationListener接口实现都会被激发,每个ApplicationListener可根据事件的类型判断是否是自己需要处理的事件,如上面的ActionListener只处理ActionEvent事件。
定义Event类,继承org.springframework.context.ApplicationEvent.
编写发布事件类Publisher,实现org.springframework.context.ApplicationContextAware接口.
覆盖方法
setApplicationContext(ApplicationContextapplicationContext)和发布方法
publish(Object obj)
定义时间监听类EventListener,实现
ApplicationListener接口,实现方法
onApplicationEvent(ApplicationEventevent).
分享到:
相关推荐
SPRING 笔记SPRING 笔记SPRING 笔记
spring笔记spring笔记spring笔记spring笔记spring笔记spring笔记
达内,tarena,spring笔记,springPPT课件,达内spring笔记 spring的全套资料
spring入门笔记
Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...
Spring笔记 Spring笔记 Spring笔记 Spring笔记 Spring笔记
spring笔记 狂神说
spring笔记.pdf
尚硅谷Spring6的笔记
Spring笔记示例源代码
尚硅谷Spring笔记
Spring学习笔记,Spring就是一个工厂,可以将所有对象创建和依赖关系维护,交给spring管理
Spring学习笔记( spring视频笔记)
spring学习笔记spring学习笔记spring学习笔记spring学习笔记spring学习笔记spring学习笔记spring学习笔记spring学习笔记
spring 初学 笔记 入门提示
Spring Cloud 学习入门笔记,全方面实践,包含 spring cloud alibaba 模块
网上获取的简单关于spring的一些学习笔记, 包括 spring, springMVC, spring cloud, springBoot 和一些其他相关的笔记, 有需要的可以看看
【狂神说】Spring全面详细笔记
我在学校时整理的笔记,从不懂时到懂,因为时间紧,要找工作,所以整理不好的请谅解,如果需要一些其它资料的,可以找我,这是我的邮箱zhj915946763@163.com,我有java基础的,spring,hibernate,Struts2,svn,xml,...