• Spring_事件监听


    处理逻辑:

      自定义事件(包含需要需要的数据体)--->  自定义监听器(可以通过泛型限制需要监听的事件,当然也可以不涉及) ---> 向IOC中发布事件 ---> 在监听器中完成实际业务的处理过程。

    1、自定义事件。

      继承ApplicationEvent

    package com.shanxilgong.linxi.listener;
    
    import org.springframework.context.ApplicationEvent;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 自定义事件
     */
    public class MyApplicationEvent extends ApplicationEvent
    {
    
        public MyApplicationEvent(Object source)
        {
            super(source);
        }
    
        private Map<String,String> data = new HashMap<String,String>();
    
        public Map<String, String> getData() {
            return data;
        }
    
        public void setData(Map<String, String> data) {
            this.data = data;
        }
    }

    2、模拟南向采集任务

       2.1 spring boot 中的ioc容器

         ConfigurableApplicationContext application = SpringApplication.run(SmalprocesssApplication.class, args);

      启动定时任务:

      

      定时任务:34行,构建事件对象。37行,向IOC容器中发布事件。

     1 package com.shanxilgong.linxi.listener;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.context.ConfigurableApplicationContext;
     5 import org.springframework.stereotype.Component;
     6 
     7 import java.util.HashMap;
     8 import java.util.Map;
     9 import java.util.TimerTask;
    10 
    11 
    12 /***
    13  * 该定时任务用于模拟南向周期性采集任务,并发布采集结果事件。
    14  */
    15 
    16 @Component
    17 public class MyTimerTask extends TimerTask
    18 {
    19 
    20     @Autowired
    21     private ConfigurableApplicationContext configurableApplicationContext;
    22 
    23     public MyTimerTask(){
    24 
    25     }
    26 
    27     @Override
    28     public void run()
    29     {
    30         Map map = new HashMap();
    31         map.put("name","zhangsan");
    32         map.put("age","20");
    33 
    34         MyApplicationEvent event  = new MyApplicationEvent(new Object());
    35         event.setData(map);
    36         // spring 的 ioc 容器,发布事件
    37         configurableApplicationContext.publishEvent(event);
    38     }
    39 }

    3、自定义监听器

      实现ApplicationListener,并添加需要监听的事件泛型,如14行。(当然也可以不添加监听事件泛型)

     1 package com.shanxilgong.linxi.listener;
     2 
     3 import org.springframework.context.ApplicationEvent;
     4 import org.springframework.context.ApplicationListener;
     5 import org.springframework.stereotype.Component;
     6 
     7 import java.lang.reflect.Method;
     8 
     9 /**
    10  * 自定义监听器
    11  * 1、可以通过泛型指定具体监听哪一类事件
    12  */
    13 
    14 public class MyApplicationListener implements ApplicationListener<MyApplicationEvent>
    15 {
    16     @Override
    17     public void onApplicationEvent(MyApplicationEvent event)
    18     {
    19         System.out.println("捕获的数据为:"+event.getData());
    20     }
    21 }
  • 相关阅读:
    slf4j绑定log4j失败
    [转]activiti5用户任务分配
    关于ajax提交的公共接口的一大用处
    jQuery插件开发方式
    centos7安装mysql
    Centos7安装JDK
    奇葩问题:spring+mybaits项目突然出现其中一些Mapper类找不到
    JAVA多线程下,获取递增的序列号
    库存扣减的流水账记录问题
    My97DatePicker使用的问题
  • 原文地址:https://www.cnblogs.com/nevegiveup/p/8993308.html
Copyright © 2020-2023  润新知