TOMCAT源码分析-事件与监听

news/2025/4/22 2:37:55

开篇

  作为Tomcat生命周期的补充,解释下事件的触发。


源码部分

  • 每个容器由于继承自LifecycleBase,当容器状态发生变化时都会调用fireLifecycleEvent方法生成LifecycleEvent,并且交由此容器的事件监听器处理。
  • 通过addLifecycleListener添加事件监听器添加到全局的lifecycleListeners。
  • 通过LifecycleBase的fireLifecycleEvent方法来触发。
public abstract class LifecycleBase implements Lifecycle {private final List<LifecycleListener> lifecycleListeners = new CopyOnWriteArrayList<>();public void addLifecycleListener(LifecycleListener listener) {lifecycleListeners.add(listener);}protected void fireLifecycleEvent(String type, Object data) {LifecycleEvent event = new LifecycleEvent(this, type, data);for (LifecycleListener listener : lifecycleListeners) {listener.lifecycleEvent(event);}}}


事件的触发机制

说明:

  • 1、Tomcat的fireLifecycleEvent的上层会通过startInternal()、stopInternal()、setStateInternal()进行调用。



说明:

  • 1、setStateInternal()方法内部会调用fireLifecycleEvent()方法。
  • 2、在LifecycleBase的内部的init()、stop()、start()、destroy()等方法内部都是触发事件执行。

https://dhexx.cn/news/show-2612002.html

相关文章

架构论文准备

数据库建模 概念模式关系模型 可靠性 冗余备份 安全性 安全技术 加密 信息摘要 数字证书 体系结构 就是 架构风格 架构的演化 就是考察架构风格 以前用什么架构 现在用什么架构架构优缺点 。 论面向服务的架构设计 就是SOA 摘要 背景 两段 过度段 回应题目子题目…

GMTC 大前端时代前端监控的最佳实践

摘要&#xff1a;今天我分享的内容分成三个部分&#xff1a; 第一部分是“大前端时代前端监控新的变化”, 讲述这些年来&#xff0c;前端监控一些新的视角以及最前沿的一些思考。 第二部分"前端监控的最佳实践"&#xff0c; 从使用的角度出发&#xff0c;介绍前端监控…

dubbo源码解析(三十一)远程调用——rmi协议

远程调用——rmi协议 目标&#xff1a;介绍rmi协议的设计和实现&#xff0c;介绍dubbo-rpc-rmi的源码。前言 dubbo支持rmi协议&#xff0c;主要基于spring封装的org.springframework.remoting.rmi包来实现&#xff0c;当然最原始还是依赖 JDK 标准的java.rmi.*包&#xff0c;采…

Spring Clould负载均衡重要组件:Ribbon中重要类的用法

Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件&#xff0c;它是一组类库的集合。通过Ribbon&#xff0c;程序员能在不涉及到具体实现细节的基础上“透明”地用到负载均衡&#xff0c;而不必在项目里过多地编写实现负载均衡的代码。比如&#xff0c;在某个包含Eureka…

LOJ #6032 「雅礼集训 2017 Day2」水箱

题目链接 https://loj.ac/problem/6032 题解 扫描线&#xff0c;先将每个操作按照y轴排序&#xff0c;考虑水从下面淹到上面。 对于挡板被截断的情况&#xff1a;并查集合并左侧和右侧的格子。 对于要求没有水的情况&#xff1a;如果水不淹到上面&#xff0c;那么它一定会被满足…

Designated Initializer 指定初始化方法

小菜编程成长记之 《Designated Initializer》 这是小菜去公司实习的第一周&#xff0c;为了好好表现自己&#xff0c;小菜下班后都留在公司继续看书学习iOS。这一天小菜在看某个开源代码的时候发现了一个之前没有见过的宏 NS_DESIGNATED_INITIALIZER。 在经过两个个小时的百度…

软件工程---gjb438b 质量规范体系

GJB438B 软件设计说明模板 https://mp.weixin.qq.com/s?__bizMjM5Mzc2NjczMQ%3D%3D&idx3&mid2651866777&sn5c8b15ef50d1574cdb6f5823dacfab7c (1) 软件研制任务书 https://www.jianshu.com/p/dfb0b22662e4 1 范围 1.1 标识 本文档适用的软件&#xff1a; a) 软件标…

你的前半生,可曾有过下定决心做某件事的时候?

作者&#xff1a;陆小凤首发&#xff1a;微信公众号【程序员江湖】不知道你们有没有看过电视剧《我的前半生》 里面的女主在遭遇家庭变故之后终于颠覆了自己&#xff0c;最终成为了独立的女性。平淡的生活看似波澜不惊&#xff0c;实际上也在消磨着你的时间&#xff0c;磨平你的…

软件工程知识点

软件开发方法 >软件开发模型 面向对象开发 结构化开发 原型开发方法 敏捷开发 同一过程开发方法&#xff08;UP&#xff09; 敏捷方法 &#xff1a; 测试先行 小版本发布 持续集成 测试驱动 结对编程&#xff08;两个人讨论方案 &#xff0c;效率好&#xff0c;风险小…

SpringAMQP 消息容器 - SimpleMessageListenerContainer

SimpleMessageListenerContainer 即简单消息监听容器。 这个类非常的强大&#xff0c;我们可以对他进行很多的设置&#xff0c;用对于消费者的配置项&#xff0c;这个类都可以满足。它有监听单个或多个队列、自动启动、自动声明功能。 它可以设置事务特性、事务管理器、事务属…