【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程

生命周期和事件监听


一个应用的启动过程和关闭过程是归属到“生命周期”这个概念的范畴。

典型的设计是在启动和关闭过程中会触发一系列的“事件”,我们只要监听这些事件,就能参与到这个过程中来。

要想监听事件,首先得有事件监听器,就是常说的Listener。下面就是Spring提供的监听器,如下图01:


按规定所有的监听器都要继承Java提供的EventListener接口,这个接口是一个空的marker接口,其实就是标识一下。

事件一般都有多个,一般也有两种常用解决方法:

要么定义多个监听器接口,一个事件一个接口。

要么一个接口里定义多个方法,一个事件一个方法。

可惜的是,这两种方法Spring都没有采用,仍然只用了一个接口一个方法,那它是如何实现的呢?

相信大家已经看到,监听器接口有一个泛型参数,没错,就是根据泛型参数的不同来区分不同事件的。

这个泛型参数就是事件对象,按规定所有的事件对象都要继承Java提供的EventObject类,如下图02:


Java提供这个类除了有标识作用外,还和事件源有关。任何事件都会有一个触发者,它就是事件源。可以认为是事件的起源或来源。

既然所有事件都有,干脆提升到顶级父类里算了。如下图03:


不同的事件,含义完全不同,所以差别很大,因此,通常一种事件会有属于自己的一种事件对象。

我们只需要看下事件对象有多少种,就能知道事件有多少种。这种判断方式一般都没有问题。

下面就是和SpringBoot启动有关的所有事件对象类型,如下图04:


一共有七种事件对象,除去一种是处理失败用的,还剩六种。也就是说我们可以通过六个事件参与到SpringBoot应用的启动中去。


实现事件监听器接口


监听器就是接口,我们首先要实现这些接口,加入处理逻辑。然后把它们添加到应用中去就行了。

有六种事件对象,我们需要定义六个实现类。

事件对象为ApplicationStartingEvent,如下图05:


事件对象为ApplicationEnvironmentPreparedEvent,如下图06:


事件对象为ApplicationContextInitializedEvent,如下图07:


事件对象为ApplicationPreparedEvent,如下图08:


事件对象为ApplicationStartedEvent,如下图09:


事件对象为ApplicationReadyEvent,如下图10:


把这个六个实现类添加到SpringBoot应用中,如下图11:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值