SpringBoot监听器及监听器设计模式

一、监听器设计模式

1、事件

①声明一个天气事件的抽象类

SpringBoot监听器及监听器设计模式

②定义两个天气事件

SpringBoot监听器及监听器设计模式
SpringBoot监听器及监听器设计模式

2、监听器

①声明一个天气监听器的接口

SpringBoot监听器及监听器设计模式

②实现两个天气事件的监听器

SpringBoot监听器及监听器设计模式SpringBoot监听器及监听器设计模式

3、广播器

①定义一个广播器的接口

SpringBoot监听器及监听器设计模式

②实现广播器接口

SpringBoot监听器及监听器设计模式

③定义一个天气的广播器

SpringBoot监听器及监听器设计模式

4、触发机制

①出发

SpringBoot监听器及监听器设计模式

②播放结果

SpringBoot监听器及监听器设计模式

5、优化广播器(低耦合,高内聚)

将触发机制封装起来

SpringBoot监听器及监听器设计模式

调用时,就感知不到内部的实现

SpringBoot监听器及监听器设计模式

二、SpringBoot的监听者模式

1、SpringBoot框架事件

SpringBoot框架事件
SpringBoot监听器及监听器设计模式
SpringBoot将监听器和事件封装了起来。
SpringBoot监听器及监听器设计模式

2、获取监听器列表

getApplicationListeners方法,会先查询监听器列表是否已经缓存过,如果没有,通过retrieveApplicationListeners方法取出监听器。

在retrieveApplicationListeners方法中,会遍历监听器,通过supportsEvent方法取出可以可以监听当前事件的监听器,并添加至队列中去。

SpringBoot监听器及监听器设计模式

3、触发机制

SpringBoot监听器及监听器设计模式

假如当前事件是Starting,遍历监听器,每个监听器首先判断是否实现了SmartApplicationListener接口

如果实现,就比对当前Starting事件是否为该监听器supportsEventType中可以监听的事件。

如果没有实现,也是比对该监听器是否可以监听Starting事件。

4、自定监听器

①实现ApplicationListener接口,只不过监听事件则恒定为ApplicationStartedEvent

②实现SmartApplicationListener接口,可以通过supportsEventType,来自定义监听事件。

③注册方法与系统初始化器一样

三、思考

SpringBoot监听器及监听器设计模式
SpringBoot监听器及监听器设计模式