| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 拆解Tomcat10: (六) 核心组件的生命周期管理与组合模式解析 -> 正文阅读 |
|
[Java知识库]拆解Tomcat10: (六) 核心组件的生命周期管理与组合模式解析 |
系列文章目录拆解Tomcat10: (一) 如何快速的学习一门新的语言 前言上一篇《拆解Tomcat10 (五) 核心组件的初始化与设计模式解析》分享了Tomcat的核心组件的是如何实现生命周期接口的,以及生命周期方法的调用逻辑。如果把Tomcat比作一台机器,那么这台机器是如何开机、关机的呢? 当按下开机键,所有核心组件会逐步初始化、启动;当按下关机键,所有组件又会随着关机,释放资源,这是如何实现的呢? 一、 组件之间的关联关系图一 上一篇有这样一幅图,Bootstrap类相当于是Tomcat的开关机模块,实际操作的是Catalina,而Catalina的核心组件由Server、Service等组成。 在前面的章节讲过,Tomcat的Server、Service等这些组件实际上是按照Server.xml文件的配置组合在一起的,包括它们之间的关联关系。以一个XML文档表示的关联关系、Server组件是root,这两点说明了什么?说明这些组件实际上是组成了一个“树”状结构。 这样的树状结构,每个节点又都实现了Lifeycle接口,这是典型的【组合模式】。 二、 ☆ 组合模式(COMPOSITE)1. 概念与结构组合模式是结构型设计模式之一。
组合模式适用于这样的场景:可以由多个元素组成一个大的组件,就像多个Host组成Engine,而多个大小组件又可组成更大的组件,就像Engine和多个Executor组成Service。无论单一元素还是组合组件,都可以认为是一致的。 组合模式的结构如下图(引用自:《设计模式:可复用面向对象软件的基础》): 图二 2. 优点及使用场景优点:
场景: 系统的树状菜单、组织或部门的树状关系等。 常见的算法: 而伴随组合模式常用的算法就是递归,一般可以通过递归方式遍历树状的节点。 三、Catalina的启动与停止从图一可以看出,当Catalina收到Bootstrap的启动要求之后,会调用根组件Server的启动方法,Server再调用Service的启动方法,依次类推,这其实就是对组件这棵树的深度优先遍历。 Catalina的start方法部分代码如下:
通过getServer()获取到对应的Server,然后调用其start方法。 Server对应的实现类为StandardServer,它没有重写start方法,直接在startInternal方法中写了对应的启动逻辑:
核心就是遍历所有的Service,调用每个Service的start方法。 对于其他组件也是依次类推,可以看出,上级组件对下级组件的调用是直接调用其start方法,因为这些组件都实现了生命周期接口,这就是组合模式的优点之一。可以把所有组件一视同仁的调用,而不用管其中的实现细节。这也方便了对组件的增减,使系统设计更加弹性、易于扩展。 对于组件的停止逻辑也类似,就不逐一介绍了,有兴趣的可以看一下对应的源码。 总结到本篇为止,我们整体的了解了Tomcat的组件结构及初始化、启动的流程。 而这些都是以概览的方式进行的,并没有对具体组件的功能进行学习。在接下来的章节会对这些组件进行详细介绍。 如果想看这些组件的具体代码实现,可以看一下这些接口对应的实现类,位置图下图的core文件夹: 图三 这个文件夹下存放了一些以Standard开头的实现类,例如StandardServer、StandardService等。 图四 可见内容还是很多的,有兴趣的可以提前看一下。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:55:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |