《看透springMVC源码》之Tomcat的生命周期

Lifecycle接口

Tomcat通过org.apache.catalina.Lifecycle接口统一管理声生命周期,所有有生命周期的组件都要实现Lifecycle接口。Life一共做了4件事情:
1. 定义可13个String类型常量,用于LifecycleEvent事件的type属性中,作用是区分组件发出的LifecycleEvent事件时的状态。
2. 定义了三个管理监听器的方法addLifecycleListener、findLifecycleListener和removeLifecycleListener,分别用来添加、查找和删除LifecycleListener类型的监听器。
3. 定义了4个生命周期的方法:init、start、stop、destroy,用于执行生命周期的各个阶段的操作。
4. 定义了获取当前状态的两个方法getState和getStateName,用来获取当前的状态,getState的返回值LifecycleState是枚举类型,里面列举了生命周期的各个节点,getStateName方法返回String类型的状态的名字,主要用于JMX中。
这里写图片描述

LifecycleBase

Lifecycle的默认实现是org.apache.catalina.util.LifecycleBase,所有实现了生命周期的组件都直接或间接地继承自LifecycleBase,LifecycleBase为Lifecycle里的接口方法提供了默认的实现:监听器管理是专门使用了一个LifecycleSupport类来完成的,LifecycleSupport中定义了一个LifecycleListener数组类型的属性来保存所有的监听器,然后并定义了添加,删除,查找和执行监听器的方法;生命周期方法中设置了相应的状态并调用了相应的模板方法,init、start、stop、destory所对应的模板方法分别是initInternal、startInternal、stopInternal和destroyinternal方法,这四个方法有子类具体实现,所以对于子类来说,执行生命周期处理的方法就是initInternal、startInternal、stopInternal和destoryInternal;组件当前的状态在生命周期的四个方法中已经设置好了,所以这时候直接返回去就可以了。
这里写图片描述

四个生命周期方法

四个生命周期方法的实现中首先判断当前的状态和要处理的方法是否匹配,如果不匹配就会执行相应方法使其匹配(如在init之前调用了start,这时会先执行init方法),或者不处理甚至抛出异常,如果匹配或者处理后匹配了,则会调用相应的模板方法并设置相应的状态。LifecycleBase中的状态是通过LifecycleState类型的state属性来保存的,最开始初始化值为LifecycleState.NEW。
下面是init方法的一个例子:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值