Spring笔记之四(Spring Event)

转贴处  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事件处理一般过程:

 

 1 public class MessageEvent extends ApplicationEvent {
 2      /**
 3      * 
 4      */
 5     private static final long serialVersionUID = 1L;
 6     private String msg;
 7         public MessageEvent(Object source, String msg) {
 8             super(source);
 9             this.msg = msg;
10         }
11         
12         public String getMessage() {
13             return msg;
14         }
15 
}




 1 public class Publisher implements ApplicationContextAware {
 2 
 3      private ApplicationContext ctx;
 4 
 5         public void setApplicationContext(ApplicationContext applicationContext)
 6                 throws BeansException {
 7             this.ctx = applicationContext;
 8 
 9         }
10 
11         public void publish(String message) {
12             ctx.publishEvent(new MessageEvent(this, message));
13         }
14         
15         public static void main(String[] args) {
16             ApplicationContext ctx = new FileSystemXmlApplicationContext(
17                     "src/applicationContext.xml");
18 
19             Publisher pub = (Publisher) ctx.getBean("publisher");
20             pub.publish("Hello World!");
21             pub.publish("The quick brown fox jumped over the lazy dog");
22         }
23 
24 }



1 public class MessageEventListener implements ApplicationListener {
2 
3       public void onApplicationEvent(ApplicationEvent event) {
4            if(event instanceof MessageEvent) {
5                MessageEvent msgEvt = (MessageEvent)event;
6                System.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(ApplicationContext applicationContext)和发布方法publish(Object obj)

定义时间监听类EventListener,实现ApplicationListener接口,实现方法onApplicationEvent(ApplicationEvent event).

阅读更多
个人分类: java语言
上一篇Spring笔记之三(Usage of property config)
下一篇Spring笔记之五(Hierarchical Bean Factory Usage)
想对作者说点什么? 我来说一句

Spring笔记

2017年11月02日 25KB 下载

spring笔记

2018年04月12日 726KB 下载

SPRING 笔记SPRING 笔记

2010年03月05日 94KB 下载

Spring笔记和小结

2010年07月28日 46KB 下载

spring MVC笔记

2018年04月12日 757KB 下载

spring注解笔记

2017年10月20日 378KB 下载

spring笔记整合在一起的

2009年08月28日 218KB 下载

spring event示例

2016年12月14日 44KB 下载

没有更多推荐了,返回首页

关闭
关闭