Tomcat8源码分析-类结构图

上一篇:Tomcat8源码分析-架构即说明apache

前面经过一张图和server.xml比较直观的了解到Tomcat的架构,接下来从类图分析看看设计模式

类图

提示:将网页放大了看,东西有点多架构

说明

类图中很是多的类,固然这必定不是全的,只是包含对理解Tomcat有重要做用的。先说说你们都实现的接口、抽象类,再说说核心的组件app

核心接口/抽象类

    Lifecycle:字面翻译“生命周期”,再看看它的方法init\start\stop\destroy,有经验的必定会感受似曾类似,背过Servlet生命周期的,是否是也见过init,destroy,没错,它真的是生命周期的接口,几乎全部重要的组件类都是它的直接或间接实现类,它们的重写方法负责完成初始化-启动-中止-销毁。源码分析

    LifecycleBase:看它的类图,能够看到颇有规律,每一个方法都有对应的xxxInternal(),而这些方法都是抽象的,由子类重写,被LifecycleBase中的start\stop\init\destroy方法调用。spa

    LifecycleMBase:它虽然是被不少类继承了,可是它主要是完成的JMX MBean注册,这样咱们经过开启VM选项-Dcom.sun.management.jmxremote,可使用jconsole看到MBean的属性值,甚至能够修改他们的值。.net

核心组件类

    既然是核心组件,那么就应该和架构图或者server.xml对应起来看,从图中能够找到他们的接口和StandardXxx实现类,这些实现类与其余类共同完成了Tomcat全部功能。全部的StandardXxx类都在org.apache.catalina.core目录中。这个“Core”也代表了它们核心的地位。翻译

代码调用流程

    这里的代码调用流程并非整个Tomcat的时序图或者全部主体流程,而是把里面一直讨论的调用流程举例出来,不要被搞晕。设计

    StandardServer(LifecycleBase).init-StandardServer.initInternal-StandardService(LifecycleBase).init-StandardService.initInternal()---依次往下,直到StandardHost,在initInternal()方法先后都要执行依次fireLifecycleEvent()和变动生命周期状态代理

    StandardServer(LifecycleBase).start-StandardServer.startInternal-StandardService(LifecycleBase).start-StandardService.startInternal()---依次往下,直到Wrapper,在startInternal()方法先后都要执行依次fireLifecycleEvent()和变动生命周期状态

    在跟踪代码的时候,特别是进到fireLifecycleEvent方法里面,不少时候进去都是白跑一趟,能够设置一个条件断点,只有当lifecycleListeners列表不为空的时候再进去。

总结:类图确实与架构图、server.xml想匹配,因此架构图应该不会有大的错误。从类图中也能够看出Tomcat在设计的时候使用了模板方法、装饰者、观察者设计模式,后面还会看到责任链模式,固然还有动态代理、工厂等。经过装饰者和观察者完成了不少重要的功能,好比Context(应用)部署。

下一篇:Tomcat8源码分析-启动流程-load方法

相关文章
相关标签/搜索