一、监听器设计模式
1、事件
①声明一个天气事件的抽象类
②定义两个天气事件
2、监听器
①声明一个天气监听器的接口
②实现两个天气事件的监听器
3、广播器
①定义一个广播器的接口
②实现广播器接口
③定义一个天气的广播器
4、触发机制
①出发
②播放结果
5、优化广播器(低耦合,高内聚)
将触发机制封装起来
调用时,就感知不到内部的实现
二、SpringBoot的监听者模式
1、SpringBoot框架事件
SpringBoot框架事件
SpringBoot将监听器和事件封装了起来。
2、获取监听器列表
getApplicationListeners方法,会先查询监听器列表是否已经缓存过,如果没有,通过retrieveApplicationListeners方法取出监听器。
在retrieveApplicationListeners方法中,会遍历监听器,通过supportsEvent方法取出可以可以监听当前事件的监听器,并添加至队列中去。
3、触发机制
假如当前事件是Starting,遍历监听器,每个监听器首先判断是否实现了SmartApplicationListener接口
如果实现,就比对当前Starting事件是否为该监听器supportsEventType中可以监听的事件。
如果没有实现,也是比对该监听器是否可以监听Starting事件。
4、自定监听器
①实现ApplicationListener接口,只不过监听事件则恒定为ApplicationStartedEvent
②实现SmartApplicationListener接口,可以通过supportsEventType,来自定义监听事件。
③注册方法与系统初始化器一样
三、思考