1. 程式人生 > >Spring Boot實戰筆記(四)-- Spring常用配置(事件Application Event)

Spring Boot實戰筆記(四)-- Spring常用配置(事件Application Event)

ans can string code text extends autowired dem plc

一、事件(Application Event)

  Spring的事件為Bean和Bean之間的消息通信提供了支持。當一個Bean處理完一個任務之後,希望另一個Bean知道並能做相應的處理,這時我們就需要讓另一個Bean監聽當前Bean所發送的事情。

  Spring的事件需要遵循如下流程:

  (1)自定義事件,集成ApplicationEvent。

  (2)定義事件監聽器,實現ApplicationListener。

  (3)使用容器發布事件。

示例:

  1.自定義事件。

package com.ecworking.event;

import org.springframework.context.ApplicationEvent;

public class DemoEvent extends ApplicationEvent{ private static final long serialVersionUID = 1L; private String msg; public DemoEvent(Object source, String msg) { super(source); this.msg = msg; } public String getMsg() { return msg; } public void
setMsg(String msg) { this.msg = msg; } }

  2.事件監聽器。

package com.ecworking.event;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class DemoListener implements ApplicationListener<DemoEvent> { //實現ApplicationListener接口,並指定監聽的事件類型。
public void onApplicationEvent(DemoEvent event){ //使用onApplicationEvent方法對消息進行接受處理。 String msg = event.getMsg(); System.out.println("bean-demoListener 接收到了 bean-demoPublisher 發布的消息:" + msg); } }

  3.事件發布類。

package com.ecworking.event;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class DemoPublisher {
    @Autowired
    ApplicationContext applicationContext; //註入ApplicationContext用來發布事件。

    public void publish(String msg){
        applicationContext.publishEvent(new DemoEvent(this, msg)); //使用 ApplcationContext 的 publishEvent 方法來發布。
    }
}

  4.配置類。

package com.ecworking.event;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.ecworking.event")
public class EventConfig {
}

  5.運行。

package com.ecworking.event;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);

        DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);

        demoPublisher.publish("hello application event");

        context.close();
    }
}

運行結果:

技術分享

Spring Boot實戰筆記(四)-- Spring常用配置(事件Application Event)