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方法

相關文章
相關標籤/搜索