How Tomcat Works (6)生命周期Lifecycle

总体概述

这一章讲的是tomcat的组件之一,LifeCycle组件,通过这个组件可以统一管理其他组件,可以达到统一启动/关闭组件的目的,那么LifeCycle是如何实现看似如此神奇的功能的呢?

实现了LifeCycle接口的组件,可以触发如下的事件

  • BEFORE_START_EVENT
  • START_EVENT
  • AFTER_START_EVENT
  • BEFORE_STOP_EVENT
  • STOP_EVENT
  • AFTER_STOP_EVENT

而事件监听器LifeCycleListener,它监听到这些事件然后做出响应的举动,在这里就可以去统一的开启/关闭容器

主要类以及接口

LifeCycle接口

public interface Lifecycle {
/**
* The LifecycleEvent type for the "component start" event.
*/
//start事件,其实它就是个字符串
public static final String START_EVENT = "start";
public static final String BEFORE_START_EVENT = "before_start";
public static final String AFTER_START_EVENT = "after_start";
public static final String STOP_EVENT = "stop";
public static final String BEFORE_STOP_EVENT = "before_stop";
public static final String AFTER_STOP_EVENT = "after_stop"; //添加Listener
public void addLifecycleListener(LifecycleListener listener);
//返回实现了这个接口的容器所绑定的listener
public LifecycleListener[] findLifecycleListeners();
//移除某个listener
public void removeLifecycleListener(LifecycleListener listener);
//lifecycle接口最重要的两个方法,组件必须提供这两个方法的实现,以供父组件调用,
//实现父组件对于子组件的开启/关闭
public void start() throws LifecycleException; public void stop() throws LifecycleException; }

LifeEvent类

生命周期事件是org.apache.catalina.LifecycleEvent类的实例,其实这个类也很简单,对于上面的String进行了一些包装,添加了一些额外的属性而已,类定义如下

public final class LifecycleEvent
extends EventObject { private Object data = null; private Lifecycle lifecycle = null;
//这里的type就对应lifecycle中定义的那6个事件
private String type = null; public LifecycleEvent(Lifecycle lifecycle, String type) { this(lifecycle, type, null); } public LifecycleEvent(Lifecycle lifecycle, String type, Object data) { super(lifecycle);
this.lifecycle = lifecycle;
this.type = type;
this.data = data; } public Object getData() { return (this.data); } public Lifecycle getLifecycle() { return (this.lifecycle); } public String getType() { return (this.type); } }

最新文章

  1. 简单动态规划-LeetCode198
  2. 微信Auth2.0授权的时候出现两次回调
  3. 如何重新安装DEDECMS织梦系统
  4. JAVA和C# 3DES加密解密
  5. Java [Leetcode 165]Compare Version Numbers
  6. 使用Windows的分析等待链(analyze wait chain)来诊断没用响应的应用
  7. C程序设计语言练习题1-22
  8. Java Instanceof
  9. Android-------设置TextView同时显示图片和文本,并控制图片大小
  10. 伪元素::selection(怎么修改网页中被选中文本的样式)
  11. $.browser.msie jq解析不出来的原因及解决方法
  12. Web Host下的URL路由
  13. MFC常见问题以及解决方法(1)_MFC下文本编辑框按下回车后窗口退出
  14. 【POJ1743】Musical Theme(后缀数组)
  15. Dotnetty 的心跳
  16. vue+elementUI项目,父组件向子组件传值,子组件向父组件传值,父子组件互相传值。
  17. 伪分布式hbase从0.94.11版本升级stable的1.4.9版本
  18. Linux 小知识翻译 - 「Shell」(也就是命令行接口)
  19. Tensorflow datasets.shuffle repeat batch方法
  20. Bytomd 助记词恢复密钥体验指南

热门文章

  1. 个人笔记docker
  2. QQ 邮箱日历提醒
  3. (四)HTTP消息报头
  4. Docker(2)- Centos 7.x 下安装 Docker
  5. C#实现的几种委托方式介绍
  6. 剑指Offer-Python(6-10)
  7. git clone克隆github仓库慢,问题解决
  8. Mysql之存储过程与存储函数
  9. Azure 静态 web 应用集成 Azure 函数 API
  10. 入坑 docsify,一款神奇的文档生成利器!