Spring_事件監聽

處理邏輯:java

  自定義事件(包含須要須要的數據體)--->  自定義監聽器(能夠經過泛型限制須要監聽的事件,固然也能夠不涉及) ---> 向IOC中發佈事件 ---> 在監聽器中完成實際業務的處理過程。spring

一、自定義事件。併發

  繼承ApplicationEventapp

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;
    }
}

二、模擬南向採集任務ide

   2.1 spring boot 中的ioc容器this

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

 

  啓動定時任務:code

  

  定時任務: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 }

三、自定義監聽器blog

  實現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  * 一、能夠經過泛型指定具體監聽哪一類事件
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 }
相關文章
相關標籤/搜索