热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springApplicationListener实现Observer观察者模式

什么是ApplicationContext?它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。Applicatio

什么是ApplicationContext? 
它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 ApplicationContext则是应用的容器。Spring把Bean(object)放在容器中,需要用就通过get方法取出来。

 

 

ApplicationEvent

 

是个抽象类,里面只有一个构造函数和一个长整型的timestamp。

 

 

ApplicationListener
是一个接口,里面只有一个onApplicationEvent方法。所以自己的类在实现该接口的时候,要实装该方法。

 

如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时,这个bean得到通知。其实这就是标准的Oberver设计模式。

 

下面给出例子:

首先创建一个ApplicationEvent实现类:

 

  1. package com.spring.event;  
  2.   
  3. import org.springframework.context.ApplicationEvent;  
  4.   
  5. /**  
  6.  * <p>Class:EmailListEventp>  
  7.  * <p>Description:p>  
  8.  * &#64;author Liam  
  9.  * &#64;Date [2012-9-7 上午8:42:07]  
  10.  */  
  11. public class EmailEvent extends ApplicationEvent {  
  12.     /**  
  13.      * <p>Description&#xff1a;p>  
  14.      */  
  15.     private static final long serialVersionUID &#61; 1L;  
  16.     public String address;    
  17.     public String text;  
  18.       
  19.     public EmailEvent(Object source) {  
  20.         super(source);  
  21.     }  
  22.       
  23.     public EmailEvent(Object source, String address, String text) {  
  24.         super(source);  
  25.         this.address &#61; address;  
  26.         this.text &#61; text;  
  27.     }  
  28.       
  29.     public void print(){  
  30.         System.out.println("hello spring event!");  
  31.     }  
  32.   
  33. }  

给出监听器&#xff1a;

 

 

 

 

  1. package com.spring.event;  
  2.   
  3. import org.springframework.context.ApplicationEvent;  
  4. import org.springframework.context.ApplicationListener;  
  5.   
  6. /**  
  7.  * <p>Class:EmailListenerp>  
  8.  * <p>Description:p>  
  9.  * &#64;author Liam  
  10.  * &#64;Date [2012-9-7 上午8:44:53]  
  11.  */  
  12. public class EmailListener implements ApplicationListener {  
  13.   
  14.     public void onApplicationEvent(ApplicationEvent  event) {  
  15.         if(event instanceof EmailEvent){  
  16.             EmailEvent emailEvent &#61; (EmailEvent)event;  
  17.             emailEvent.print();  
  18.             System.out.println("the source is:"&#43;emailEvent.getSource());  
  19.             System.out.println("the address is:"&#43;emailEvent.address);  
  20.             System.out.println("the email&#39;s context is:"&#43;emailEvent.text);  
  21.         }  
  22.           
  23.     }  
  24.   
  25. }  

 

applicationContext.xml文件配置&#xff1a;

测试类&#xff1a;

  1. package com.spring.event;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. /**  
  7.  * <p>Class:Testp>  
  8.  * <p>Description:p>  
  9.  * &#64;author Liam  
  10.  * &#64;Date [2012-9-6 上午10:41:34]  
  11.  */  
  12. public class Test {  
  13.     public static void main(String[] args) {  
  14.         ApplicationContext context &#61; new ClassPathXmlApplicationContext("classpath:applicationContext.xml");  
  15.           
  16.         //HelloBean hello &#61; (HelloBean) context.getBean("helloBean");  
  17.         //hello.setApplicationContext(context);  
  18.         EmailEvent event &#61; new EmailEvent("hello","boylmx&#64;163.com","this is a email text!");  
  19.         context.publishEvent(event);  
  20.         //System.out.println();  
  21.     }  
  22. }  

 

测试结果&#xff1a; 

 

 

  1. <pre class&#61;"html" name&#61;"code">hello spring event!  
  2. the source is:hello  
  3. the address is:boylmx&#64;163.com  
  4. the email&#39;s context is:this is a email text!  
  5. pre>  
  6. <pre>pre> 

关注微信公众号和今日头条&#xff0c;精彩文章持续更新中。。。。。


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 标题: ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
author-avatar
手机用户2502870367
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有