tomcat分析之Lifecycle以及LifecycleBase

Lifecycle

在之前tomcat的分析中,我们通常会提到一个init(),和start(),以及initInternal()和startInternal()。
至于其中的调用过程在前文只是简单提到过,没有详细讲过,通过这一篇,可以详细的了解关于tomcat生命周期的定义,以及其中方法的调用

*            start()
*  -----------------------------
*  |                           |
*  | init()                    |
* NEW -»-- INITIALIZING        |
* | |           |              |     ------------------«-----------------------
* | |           |auto          |     |                                        |
* | |          \|/    start() \|/   \|/     auto          auto         stop() |
* | |      INITIALIZED --»-- STARTING_PREP --»- STARTING --»- STARTED --»---  |
* | |         |                                                            |  |
* | |destroy()|                                                            |  |
* | --»-----«--    ------------------------«--------------------------------  ^
* |     |          |                                                          |
* |     |         \|/          auto                 auto              start() |
* |     |     STOPPING_PREP ----»---- STOPPING ------»----- STOPPED -----»-----
* |    \|/                               ^                     |  ^
* |     |               stop()           |                     |  |
* |     |       --------------------------                     |  |
* |     |       |                                              |  |
* |     |       |    destroy()                       destroy() |  |
* |     |    FAILED ----»------ DESTROYING ---«-----------------  |
* |     |                        ^     |                          |
* |     |     destroy()          |     |auto                      |
* |     --------»-----------------    \|/                         |
* |                                 DESTROYED                     |
* |                                                               |
* |                            stop()                             |
* ----»-----------------------------»------------------------------

以上是来自tomcat中 Lifecycle的一个流程图
在这里插入图片描述
这是关于在Lifecycle中的一些方法定义和常量定义
由上就可以了解

  • 定义了13个常量,用于LifecycleEvent事件中type属性,

    好处:只需要发送一种类型事件LifecycleEvent,就可以判断是什么事件,否则每种事件都得需要定义类

  • 定义了4种状态

    init(),start(),stop(),destroy()

  • 定义了3种监听器相关的方法

    addLifecycleListener(),findLifecycleListeners(),removeLifecycleListener()

  • 2种获取当前状态

    getState(),getStateName()

    这些接口方法,以及状态定义构成了tomcat的生命周期,以及一些基本的方法

LifecycleBase

public abstract class LifecycleBase implements Lifecycle
  • 实现Lifecycle接口的一个抽象类

  • 默认实现了3个监听器方法的实现,添加了一个fireLifecycleEvent()方法

    • 利用一个CopyOnWriteArrayList来保存监听器
    • 添加了fireLifecycleEvent()方法,处理lifecycleEvent时间的方法。
  • 注:tomcat7中由LifecycleSupport来定义关于生命周期的方法

  • 注:tomcat7中存在LifecycleSupport,tomcat8.5中不存在LifecycleSupport

  • 4个生命周期方法:

    • init(),看一波源码

      @Override
      public final synchronized void init() throws LifecycleException {
             
          if (!state.equals(LifecycleState.NEW)) {
             
              invalidTransition(Lifecycle.BEFORE_INIT_EVENT);
          }
      
          try {
             
              setStateInternal(LifecycleState.INITIALIZING, null, false);
              initInternal();
              setStateInternal(LifecycleState.INITIALIZED, null, false);
          } catch (Throwable t) {
             
              handleSubClassException(t, "lifecycleBase.initFail", toString());
          }
      }
      
      • 将状态设置成了INITIALIZING

      • 然后执行具体的initInternal()(这也是为什么之前分析init()方法其实本质就是分析initInternal();)

        这里的initInternal都是指子类重写的方法

      • 然后再将状态设置成INITIALIZED,初始化结束

    • start();看一波源码

      @Override
      public final synchronized void start() throws LifecycleException {
             
          if (LifecycleState
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值