1、SpringBoot中的監聽器模式
1) 監聽器 ApplicationListener
@FunctionalInterface public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { void onApplicationEvent(E var1); }
FunctionalInterface是jdk8新增的,表示ApplicationListener接口只有一個方法,如果大於一個方法,就不能使用這注解
接口中有個泛型<E extends ApplicationEvent>,繼承自ApplicationEvent。就代表這實現這個接口時,可以聲明對哪些事件(如ApplicationEvent)感興趣,在觸發監聽器的時候,對感興趣的事件進行過濾。
2) 系統廣播器ApplicationEventMulticaster接口
public interface ApplicationEventMulticaster { void addApplicationListener(ApplicationListener<?> var1); void addApplicationListenerBean(String var1); void removeApplicationListener(ApplicationListener<?> var1); void removeApplicationListenerBean(String var1); void removeAllListeners(); void multicastEvent(ApplicationEvent var1); void multicastEvent(ApplicationEvent var1, @Nullable ResolvableType var2); }
ApplicationEventMulticaster接口主要有三類方法,增加監聽器,刪除監聽器,廣播方法
3) 系統事件 【問題】SpringBoot框架有哪些事件?
4) 【問題】SpringBoot中的事件發送順序
待補充
5) 監聽器注冊
類似於前面介紹的初始化器。在設置初始化器后面調用設置監聽器
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
和初始化器調用的同一個方法getSpringFactoriesInstances,只是參數為ApplicationListener.class
Debug后,可以發現有以下監聽器,如下圖。【問題】SpringBoot關於監聽器相關的實現類有哪些?