spring 事件的使用

1. 介紹

事件Event驅動模型實際也被稱之或者發佈/訂閱模型。Spring中,也爲我們提供了這樣的框架,採用Event/Listener這樣的好處自然不用多說,就是解耦,利於擴展,並且利於一對多這種形式,我們下面就來介紹下Spring的Event模式

2. 核心

主要就3個:

ApplicationEvent:事件本身

ApplicationEventPublisher:事件發佈者

ApplicationListener:事件監聽者

事件監聽者會一直監聽事件,當事件發佈者發佈事件後,事件監聽者能夠給監聽到事件,並作出一些操作

2.1 事件

public class MyApplicationEvent extends ApplicationEvent {
    public MyApplicationEvent(String message) {
        super(message);
    }
}

繼承ApplicationEvent類,然後寫個構造函數即可

2.2 事件發佈者

有兩種方式,

第一個是通過實現ApplicationEventPublisherAware接口

它的setApplicationEventPublisher重寫方法中的參數是可以直接使用的publisher

@Component
public class EventPublish  implements ApplicationEventPublisherAware{

    private ApplicationEventPublisher applicationEventPublisher;

    //該方法的參數就是可以直接使用的發佈者,所以我們可以將它賦予到成員變量上來進行使用
    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
         this.applicationEventPublisher =  applicationEventPublisher;
    }

    // 發佈事件
    public void publish() {
        applicationEventPublisher.publishEvent(new MyApplicationEvent("hello"));
    }
}

第二種是直接注入使用

@Autowired
private ApplicationEventPublisher applicationEventPublisher;

打印了以下注入後的applicationEventPublisher,發現它其實是已經存在的bean:

org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext

默認的ApplicationEventPublisher實現就是AbstractApplicationContext。

2.3 事件監聽者

也有兩種方式可以實現:

註解方式

@Configuration
public class EventListenerConfig {

    @EventListener
    public void onEvent(MyApplicationEvent event) {
        System.out.println("監聽事件註解方式 : " + event);
    }
}

實現類方式

@Component
public class MyEventListener implements ApplicationListener<MyApplicationEvent> {

    @Override
    public void onApplicationEvent(MyApplicationEvent event) {
        System.out.println("監聽事件實現方式 : " + event);
    }
}

3 測試

使用事件發佈者發佈事件即可,監聽器會打印出內容

 

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