tomcat源码阅读之生命周期(LifeCycle)
一、事件机制流程:

1、 当外部事件源发生事件(比如点击了按钮,数据发生改变更新等)时,事件源将事件封装成事件对象Event;
2、 将事件对象交由对应的事件派发器Dispatcher进行派发(将Event对象传递给事件派发器。事件派发器中存储了一个事件监听器列表,需要提前将监听器注册到派发器的),事件派发器会循环遍历监听器列表,将事件对象派发给监听器;
3、 监听器接收到派发器派发过来的事件对象Event后,从Event中取出事件信息并进行响应;
二、相关接口:
1、LifeCycle接口:

LifeCycle接口的实现类必须实现start和stop方法,供父组件调用,以实现对其进行启动/关闭操作。当servlet容器启动时,它必须启动该容器下的所有子容器对象(也即调用start方法),当servlet容器关闭时,它必须关闭该容器下的所有子容器对象(也即调用stop方法)。这种机制使得只需要启动一个组件就可以将全部应用的组件都启动起来。
addLifeCycleListener/findLifeCycleListener/removeLifeCycleListener实现了对监听器的管理;
2、LifeCycleEvent接口:

封装了事件相关数据;
3、LifeCycleListener接口:

这个接口只有一个方法:LifeCycleEvent,也就是事件发生时,事件派发器将事件派发过来时调用的接口函数,同时传递了一个事件对象Event,通过这个Event可以获取到事件相关的数据信息并进行响应;
三、LifeCycleSupport:

1、 LifeCycleSupport接口定义了一个listeners的数组,可以通过接口函数addLifeCycleListener/removeLifeCycleListener/findLifeCycleListener来管理监听器列表;
2、 当外部事件发生时,通过调用fireLifeCycleEvent来将事件派发给所有注册的监听器,代码如下:

tomcat源码阅读之生命周期(LifeCycle)的更多相关文章
- Vue2.0源码阅读笔记--生命周期
一.Vue2.0的生命周期 Vue2.0的整个生命周期有八个:分别是 1.beforeCreate,2.created,3.beforeMount,4.mounted,5.beforeUpdate,6 ...
- Tomcat源码阅读(二)初始化
近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...
- Spring源码系列 — Bean生命周期
前言 上篇文章中介绍了Spring容器的扩展点,这个是在Bean的创建过程之前执行的逻辑.承接扩展点之后,就是Spring容器的另一个核心:Bean的生命周期过程.这个生命周期过程大致经历了一下的几个 ...
- Laravel源码分析--Laravel生命周期详解
一.XDEBUG调试 这里我们需要用到php的 xdebug 拓展,所以需要小伙伴们自己去装一下,因为我这里用的是docker,所以就简单介绍下在docker中使用xdebug的注意点. 1.在php ...
- angular11源码探索[DoCheck 生命周期和onChanges区别]
网站 https://blog.thoughtram.io/ https://juristr.com/ https://www.concretepage.com/angular/ https://ww ...
- 深入源码理解SpringBean生命周期
概述 本文描述下Spring的实例化.初始化.销毁,整个SpringBean生命周期,聊一聊BeanPostProcessor的回调时机.Aware方法的回调时机.初始化方法的回调及其顺序.销毁方法的 ...
- Spring源码 21 Bean生命周期
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- tomcat源码阅读
1 工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2 下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...
- tomcat源码阅读之过滤器
一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...
随机推荐
- yum安装docker报 No package docker available错误
解决方案: yum install epel-release 然后再安装 CentOS6 yum install http://mirrors.yun-idc.com/epel/6/i386/epel ...
- oracle12c新特点之可插拔数据库(Pluggable Database,PDB)
1. 12c PDB新特点的优势 1) 可以把多个PDB集成进一个平台. 2) 可以快速提供一个新的PDB或一个已有PDB的克隆. 3) 通过拔插技术,可以快速把存在的数据库重 ...
- zk键值数据结构
首先看一张zk官网上的图: zk为我们提供了一种类似于文件存储的树形数据结构,那么它是如何实现的呢? 先假定我们有一个map,以路径名作为键,以节点作为值,如下: “/” -> 节点1,“/ap ...
- 从输入URL到页面加载发生了什么
大体过程 浏览器的地址栏输入URL并按下回车 浏览器检查当前URL是否存在缓存,并比较缓存是否过期 DNS解析URL对应的IP 根据IP建立TCP连接(三次握手) HTTP发起请求 服务器处理请求,浏 ...
- iOS使用UIWebView遇到Error Domain=WebKitErrorDomain Code=101 “The operation couldn’t be completed. (WebKitErrorDomain error 101
现在在接触iOS开发,今天在调试一个界面加载web页面的问题,发现死活无法加载,浏览器里能正常打开,加上相应代码之后得到了错误信息为: 2013-04-18 15:05:06.446 Client_D ...
- 福大软工1816 - 第八次作业(课堂实战)- 项目UML设计
团队 学号 姓名 本次作业博客链接 031602428 苏路明(组长) https://www.cnblogs.com/Sulumer/p/9822854.html 031602401 陈瀚霖 htt ...
- anu - event
import { document } from "./browser"; import { isFn, noop, options } from "./util&quo ...
- Python decode和encody
s = "我今天非常的困" bs = s.encode("utf-8")# 把字符串转化成utf-8格式bytes # bytes 不是给人看的, 给机器用的 ...
- python 学习日志
1.pip is already installed if you're using Python 2 >=2.7.9 or Python 3 >=3.4 binaries downloa ...
- QNX的深度嵌入过程
QNX的深度嵌入过程 1.1 QNX目标系统嵌入 利用QNX的模块性和和可裁剪性,其嵌入过程一般是: 构建Buildfile -> 编译buildfile生成系统映象文件 ...