`
jiqimiao
  • 浏览: 59022 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

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

<!--<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).

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics