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 }
原文地址:https://www.cnblogs.com/nevegiveup/p/8993308.html