拆解Tomcat10: (五) 核心组件的协调控制与设计模式解析(二)

简介: 上一篇《拆解Tomcat10: (四) 图解架构》分享了Tomcat的核心组件及其架构关系,本章接着讲解组件的Tomcat的初始化过程,这么多组件是如何统一加载、启动的。这其中用到了哪些设计模式和设计原则。

二、☆模板方法模式(TEMPLATE METHOD)

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。


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


结合上一节的例子:


由LifecycleBase定义了一个算法骨架,来实现Lifecycle接口的init()方法。这个算法骨架就是模板方法。

LifecycleBase类是一个通用的类,所以其中的逻辑只能是通用的逻辑。这些逻辑写在init()方法中,即通过setStateInternal方法触发相应状态的事件等功能逻辑。

调用一个抽象方法initInternal(),这个方法交由子类去重写,来实现具体业务逻辑。

1. 总结一下模板方法模式适用的场景:

  • 一个算法逻辑由多个类实现,不同的类之间的逻辑有通用的也有个性化的。
  • 创建一个抽象类,完成算法骨架。
  • 抽象类中实现通用逻辑,并调用一个空方法,具体逻辑交由子类实现。
  • 继承抽象类的子类实现自身的个性化逻辑。

2. 模板方法模式的好处:

  • 代码复用,子类不用再写一遍通用的逻辑。
  • 定义了算法骨架,对算法实现进行了约束。
  • 权限隔离,抽象类和子类可能由不同角色完成,子类的修改不会影响通用逻辑,也就不会影响其他子类。

类图如下:

80.png

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


这也是非常惯例的一种实现方式,如果一个接口会被多个不同类实现,那么常见的操作就是使用一个类去实现这个接口,在这个实现类中编写通用的方法,并调用需要子类实现的抽象方法。子类直接或间接继承这个抽象类,并根据自身需要实现具体逻辑。

三、所有核心组件的Init方法传递

继续上一篇的Catalina类的load()方法,此时完成了对Server.xml文件的解析,并将其赋值给了Catalina的server属性。接下来就是调用getServer().init();方法进行初始化。Server组件作为最上层组件,我们已经知道了其初始化是如何进行的,那么其他子组件是如何统一 管理的呢?


看一下第一节中StandardServer类的initInternal()方法的代码,在最后一部分通过循环遍历的方式调用了所有Service的init方法。

// 初始化定义的 Services
for (Service service : services) {
    service.init();
}

同理,由图一可知,Service同样是继承了LifecycleBase类,所以Service和Server的上层通用逻辑是一样的,那么看一下StandardService的initInternal()方法:

@Override
protected void initInternal() throws LifecycleException {
    super.initInternal();
    //Engine 初始化
    if (engine != null) {
        engine.init();
    }
    // 初始化 Executors
    for (Executor executor : findExecutors()) {
        if (executor instanceof JmxEnabled) {
            ((JmxEnabled) executor).setDomain(getDomain());
        }
        executor.init();
    }
    // 初始化 mapper listener
    mapperListener.init();
    // 初始化 our defined Connectors
    synchronized (connectorsLock) {
        for (Connector connector : connectors) {
            connector.init();
        }
    }
}

其中进行了Engine、Executors、mapperListener、Connectors的初始化,以此类推,其他的组件的initInternal()方法我们就不逐一研究了,因为此处暂不关心这几个组件的功能,仅关注组件之间的关系和调用逻辑。具体每个组件的功能及处理逻辑在单独学习该组件的时候再进行分析。


大概流程如下(只画了部分组件):


0.png

0.png

(图三)

目录
相关文章
|
9月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
201 0
|
7月前
|
应用服务中间件 Linux 测试技术
Tomcat启动错误:组件启动失败StandardEngine[Catalina].StandardHost[localhost].StandardContext[]
解决此类问题需要系统地排查和分析,有时候甚至需要根据应用的具体情况定制化解决方案。注意的是,如果问题涉及到复杂的应用逻辑或第三方库,那么可能需要深入到具体的应用代码和库文档中查找原因。最后,保持软件环境的更新也是预防这类问题的好习惯,因为新版本的软件通常会修复旧版本中的已知错误。
872 12
|
11月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
1295 13
|
11月前
|
设计模式 SQL Java
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。
315 8
|
11月前
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
551 7
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
1072 2
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
1239 1
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
5月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
971 5

推荐镜像

更多
  • DNS