Spring常用配置-Event

一、什麼是Event?

Spring的Event(事件)爲Bean與Bean之間的消息通信提供了支持。
通俗來說,當BeanA處理完事情,我們希望BeanB知道BeanA處理了這件事情並作出相應處理,這個時候我們就要用到Event了

二、如何使用Event?

  1. 自定義事件,繼承ApplicationEvent
  2. 定義事件監聽器,實現ApplicationListener
  3. 使用容器發佈事件

三、EventDemo

事件類

package com.cactus.demo.event;

import org.springframework.context.ApplicationEvent;

/**
 * Created by liruigao
 * Date: 2019-10-15 14:44
 * Description:
 */


public class DemoEvent extends ApplicationEvent {

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

監聽器類

package com.cactus.demo.event;

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

/**
 * Created by liruigao
 * Date: 2019-10-15 14:45
 * Description:
 */

@Component
public class EventListener implements ApplicationListener<DemoEvent> {

    public void onApplicationEvent(DemoEvent demoEvent) {
        String msg = demoEvent.getMsg();
        System.out.println("I had recived some msgs from publisher : " + msg);
    }
}

容器發佈類

package com.cactus.demo.event;

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

/**
 * Created by liruigao
 * Date: 2019-10-15 14:48
 * Description:
 */

@Component
public class DemoPublisher {
    @Autowired
    private ApplicationContext applicationContext;

    public void publish(String msg) {
        applicationContext.publishEvent(new DemoEvent(this, msg));
    }
}

配置類

package com.cactus.demo.event;

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

/**
 * Created by liruigao
 * Date: 2019-10-15 14:51
 * Description:
 */

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

Main

package com.cactus.demo.event;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created by liruigao
 * Date: 2019-10-15 14:50
 * Description:
 */


public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
        DemoPublisher publisher = context.getBean(DemoPublisher.class);
        publisher.publish("hi honey~");
        context.close();
    }
}

result
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章