拆解Tomcat10: (六) 核心组件的生命周期管理与组合模式解析(一)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 上一篇《拆解Tomcat10 (五) 核心组件的初始化与设计模式解析》分享了Tomcat的核心组件的是如何实现生命周期接口的,以及生命周期方法的调用逻辑。如果把Tomcat比作一台机器,那么这台机器是如何开机、关机的呢?当按下开机键,所有核心组件会逐步初始化、启动;当按下关机键,所有组件又会随着关机,释放资源,这是如何实现的呢?

一、 组件之间的关联关系

12.png图一


上一篇有这样一幅图,Bootstrap类相当于是Tomcat的开关机模块,实际操作的是Catalina,而Catalina的核心组件由Server、Service等组成。


在前面的章节讲过,Tomcat的Server、Service等这些组件实际上是按照Server.xml文件的配置组合在一起的,包括它们之间的关联关系。以一个XML文档表示的关联关系、Server组件是root,这两点说明了什么?说明这些组件实际上是组成了一个“树”状结构。


这样的树状结构,每个节点又都实现了Lifeycle接口,这是典型的【组合模式】。

二、 ☆ 组合模式(COMPOSITE)

1. 概念与结构

组合模式是结构型设计模式之一。


将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。


-引用自:《设计模式:可复用面向对象软件的基础》


组合模式适用于这样的场景:可以由多个元素组成一个大的组件,就像多个Host组成Engine,而多个大小组件又可组成更大的组件,就像Engine和多个Executor组成Service。无论单一元素还是组合组件,都可以认为是一致的。


组合模式的结构如下图(引用自:《设计模式:可复用面向对象软件的基础》):


13.png

13.png

图二

2. 优点及使用场景

优点:


定义了包含基本对象和组合对象的类层次结构:基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去。在客户代码中,任何用到基本对象的地方都可以使用组合对象。

简化客户代码:客户可以一致地使用组合结构和单个对象。通常用户不知道(也不关心)处理的是一个叶节点还是一个组合组件。这就简化了客户代码,因为在定义组合的那些类中不需要写一些充斥着选择语句的函数。

使得更容易增加新类型的组件新定义的Composite或Leaf子类自动地与已有的结构和客户代码一起工作,客户程序不需因新的Component类而改变。

使你的设计变得更加一般化:可以很容易的增加新组件。 但这也会产生一些问题,那就是很难限制组合中的组件。有时你希望一个组合只能有某些特定的组件。使用组合模式时,你不能依赖类型系统施加这些约束,而必须在运行时刻进行检查。

场景:


系统的树状菜单、组织或部门的树状关系等。


常见的算法:


而伴随组合模式常用的算法就是递归,一般可以通过递归方式遍历树状的节点。


目录
相关文章
|
28天前
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
81 2
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
161 2
|
3月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
负载均衡 5G 网络性能优化
深入解析LTE(长期演进技术)的基本架构及其关键组件
深入解析LTE(长期演进技术)的基本架构及其关键组件
345 2
|
17天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
23 1
|
2月前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
172 60
|
27天前
|
存储 JavaScript 前端开发
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
98 2
|
5天前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理
|
28天前
|
机器学习/深度学习 编解码 算法
深入解析MaxFrame:关键技术组件及其对视频体验的影响
【10月更文挑战第12天】随着流媒体服务和高清视频内容的普及,用户对于视频质量的要求越来越高。为了满足这些需求,许多技术被开发出来以提升视频播放的质量。其中,MaxFrame是一种旨在通过一系列先进的图像处理算法来优化视频帧的技术。本文将深入探讨构成MaxFrame的核心组件,包括运动估计、超分辨率重建以及时间插值算法,并讨论这些技术如何协同工作以改善视频播放效果。
38 1
|
12天前
|
机器学习/深度学习 自然语言处理 数据管理
GraphRAG核心组件解析:图结构与检索增强生成
【10月更文挑战第28天】在当今数据科学领域,自然语言处理(NLP)和图数据管理技术的发展日新月异。GraphRAG(Graph Retrieval-Augmented Generation)作为一种结合了图结构和检索增强生成的创新方法,已经在多个应用场景中展现出巨大的潜力。作为一名数据科学家,我对GraphRAG的核心组件进行了深入研究,并在此分享我的理解和实践经验。
35 0

推荐镜像

更多