看透SpringMVC读书笔记-Tomcat篇(2)

Tomcat的生命周期

tomcat通过org.apache.catalina.Lifecycle接口来统一管理生命周期的,所有生命周期的组件都要实现这个接口,Lifecycle一个做了四件事。

org.apache.catalina.Lifecycle

(1)定义了13个String类型的常量用来区分LifecycleEvent对象的type属性,作用是区分组件发出的LifecycleEvent事件的状态。这种设计方式可以让多种状态都发送同一种类型的事件,然后用其中的一个属性来区分状态而不用定义多种事件。(书中原文有些复杂,简单的说就是将不通的类型状态提取到公用的基类或定义final静态变量来创建一个公用的属性,免得设计13个事件类,臃肿,维护麻烦)

(2)定义三个监听器的方法,addLifecycleListener(),findLifecycleListeners(),removeLifecycleListener(),分辨用来添加,删除,查找LifecycleListener类型的监听器。

(3)定义了4个生命周期的方法,init(),start(),stop(),destory(),用于执行生命周期的各个阶段。

(4)定义了获取当前状态的两个方法,getState返回LifecycleState是个枚举类(注:这个枚举类的状态属性定义的是Lifecycle的生命周期状态,图中通过静态变量定义的是LifecycleEvent的type类型),里面列举了生命周期的各个节点,getStateName直接返回生命周期字符串。

LifecycleBase

LifecycleBase是Lifecycle接口的默认实现,所有实现了生命周期的组件都直接或间接的继承了LifecycleBase,而监听器的管理方法则使用了LifecycleSupport类来完成,LifecycleSupport类里有一个LifecycleListener类型的数组来储存listener,增删查方法通过对数组的操作进行LifecycleListener进行管理,如添加则是创建一个比原来大1的数组,把心监听加进去,并吧管理监听的数组指向这个新的数组。

生命周期的方法中设置了相应的状态并调用了相应的模板方法,init,start,stop,destory对应模板方法initInternal,startInternal,stopInternal,destroyInternal,这四个方法具体由子类实现。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值