• Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法


    什么是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 public class EmailEvent extends ApplicationEvent {
     6     /**
     7      * <p>Description:</p>
     8      */
     9     private static final long serialVersionUID = 1L;
    10     public String address;  
    11     public String text;
    12     
    13     public EmailEvent(Object source) {
    14         super(source);
    15     }
    16     
    17     public EmailEvent(Object source, String address, String text) {
    18         super(source);
    19         this.address = address;
    20         this.text = text;
    21     }
    22     
    23     public void print(){
    24         System.out.println("hello spring event!");
    25     }
    26 
    27 }

    给出监听器:

     1 package com.spring.event;
     2 
     3 import org.springframework.context.ApplicationEvent;
     4 import org.springframework.context.ApplicationListener;
     5 public class EmailListener implements ApplicationListener {
     6 
     7     public void onApplicationEvent(ApplicationEvent  event) {
     8         if(event instanceof EmailEvent){
     9             EmailEvent emailEvent = (EmailEvent)event;
    10             emailEvent.print();
    11             System.out.println("the source is:"+emailEvent.getSource());
    12             System.out.println("the address is:"+emailEvent.address);
    13             System.out.println("the email's context is:"+emailEvent.text);
    14         }
    15         
    16     }
    17 
    18 }

    applicationContext.xml文件配置:

    <bean id="emailListener" class="com.spring.event.EmailListener"></bean>

    测试类:

     1 package com.spring.event;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Test {
     7     public static void main(String[] args) {
     8         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
     9         
    10         //HelloBean hello = (HelloBean) context.getBean("helloBean");
    11         //hello.setApplicationContext(context);
    12         EmailEvent event = new EmailEvent("hello","boylmx@163.com","this is a email text!");
    13         context.publishEvent(event);
    14         //System.out.println();
    15     }
    16 }

    测试结果

    hello spring event!  
    the source is:hello  
    the address is:boylmx@163.com  
    the email's context is:this is a email text!  
  • 相关阅读:
    CocoaPods的基本使用方法
    【STM32】电能表抄表功能实现|自学笔记
    【STM32】串口收发驱动Drv_Uart|学习笔记
    【STM32】SYSCLK配置|学习笔记
    【stm32】的PWM外设|学习笔记
    【JavaScript】setAttribute在添加事件时失效解决办法
    三步建立自己域名的主页,Github Pages功能简明手册
    Java生成UUID 与 MySQL数据库如何生成uuid数据
    利用Excel办公软件快速拼接SQL
    Java实现几种常见排序方法
  • 原文地址:https://www.cnblogs.com/wihainan/p/6237436.html
Copyright © 2020-2023  润新知