日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Tomcat生命周期詳解

瀏覽:452日期:2023-03-19 16:51:53
目錄
  • 引言
  • 1、LifeCycle接口設計
    • 1.1 生命周期的方法
    • 1.2 相關的狀態處理
  • 2.監聽器和事件的設計
    • 3.LifecycleBase
      • 3.1 事件處理
      • 3.2 生命周期方法

    引言

    在上篇文章中我們看到了Tomcat架構中的核心組件,而且各個組件都有各自的作用,各司其職,而且相互之間也有對應的父子關系,那么這些對象的創建,調用,銷毀等操作是怎么處理呢?

    也就是在Tomcat中的組件的對象生命周期是怎么管理的呢?針對這個問題,在Tomcat中設計了Lifecycle接口來統一管理Tomcat中的核心組件的生命周期,所以本文我們就系統的來介紹下Lifecycle接口的設計

    1、LifeCycle接口設計

    為了統一管理Tomcat中的核心組件的生命周期,而專門設計了LifeCycle接口來統一管理,我們來看看在LifeCycle接口中聲明了哪些內容。

    1.1 生命周期的方法

    在LifeCycle中聲明了和生命周期相關的方法,包括init(),start(),stop(),destory()等方法。

    在聲明的方法執行的過程中會涉及到對應的狀態的轉換,在LifeCycle接口的頭部文檔中很清楚的說了。

    1.2 相關的狀態處理

    通過上圖我們可以很清楚的看到相關的方法執行會涉及到的相關狀態的轉換,比如init()會從New這個狀態開始,然后會進入 INITIALIZING 和 INITIALIZED 等。因為這塊涉及到了對應的狀態轉換,在Lifecycle中聲明了相關的狀態和事件的生命周期字符串。

        public static final String BEFORE_START_EVENT = "before_start";    public static final String AFTER_START_EVENT = "after_start";    public static final String STOP_EVENT = "stop";    public static final String BEFORE_STOP_EVENT = "before_stop";    public static final String AFTER_STOP_EVENT = "after_stop";    public static final String AFTER_DESTROY_EVENT = "after_destroy";    public static final String BEFORE_DESTROY_EVENT = "before_destroy";    /**     * The LifecycleEvent type for the "periodic" event.     * 周期性事件(后臺線程定時執行一些事情,比如:熱部署、熱替換)     */    public static final String PERIODIC_EVENT = "periodic";    public static final String CONFIGURE_START_EVENT = "configure_start";    public static final String CONFIGURE_STOP_EVENT = "configure_stop";

    在LifecycleState中建立了對應關系

    針對特定的事件就會有相關的監聽器來監聽處理。在Lifecycle中定義了相關的處理方法。

        public void addLifecycleListener(LifecycleListener listener);    public LifecycleListener[] findLifecycleListeners();    public void removeLifecycleListener(LifecycleListener listener);

    通過方法名稱我們就能很清楚該方法的相關作用,就不過程介紹了。然后來看下對應的監聽器和事件接口的對應設計。

    2.監聽器和事件的設計

    接下來看下LifecycleListener的設計。其實代碼非常簡單。

    public interface LifecycleListener {    /**     * Acknowledge the occurrence of the specified event.     *  觸發監聽器后要執行邏輯的方法     * @param event LifecycleEvent that has occurred     */    public void lifecycleEvent(LifecycleEvent event);}

    然后來看下事件的接口

    public final class LifecycleEvent extends EventObject {    private static final long serialVersionUID = 1L;    /**     * Construct a new LifecycleEvent with the specified parameters.     *     * @param lifecycle Component on which this event occurred     * @param type Event type (required)     * @param data Event data (if any)     */    public LifecycleEvent(Lifecycle lifecycle, String type, Object data) {super(lifecycle); // 向上轉型,可接受一切實現了生命周期的組件this.type = type;this.data = data;    }    /**     * The event data associated with this event.     * 攜帶的額外的數據,傳遞給監聽器的數據     */    private final Object data;    /**     * The event type this instance represents.     * 事件類型     */    private final String type;    /**     * @return the event data of this event.     */    public Object getData() {return data;    }    /**     * @return the Lifecycle on which this event occurred.     */    public Lifecycle getLifecycle() {return (Lifecycle) getSource();    }    /**     * @return the event type of this event.     */    public String getType() {return this.type;    }}

    也是非常簡單,不過多的贅述。

    3.LifecycleBase

    通過上面的介紹我們可以看到在Tomcat中設計了Lifecycle和LifecycleListener和LifecycleEvent來管理核心組件的生命周期,那么我們就需要讓每一個組件都實現相關的接口。這時你會發現交給子類的工作量其實是比較大的,不光要完成各個組件的核心功能,還得實現生命周期的相關處理,耦合性很強,這時在Tomcat中給我們提供了一個LifecycleBase的抽象類,幫助我們實現了很多和具體業務無關的處理,來簡化了具體組件的業務。

    3.1 事件處理

    在上面的接口設計中對于監聽對應的事件處理是沒有實現的,在LifecycleBase把這塊很好的實現了,我們來看下。首先定義了一個容器來存儲所有的監聽器

    // 存儲了所有的實現了LifecycleListener接口的監聽器 private final List<LifecycleListener> lifecycleListeners = new CopyOnWriteArrayList<>();

    同時提供了觸發監聽的相關的方法,綁定了對應的事件。

        /**     * Allow sub classes to fire {@link Lifecycle} events.     *     監聽器觸發相關的事件     * @param type  Event type  事件類型     * @param data  Data associated with event.     */    protected void fireLifecycleEvent(String type, Object data) {LifecycleEvent event = new LifecycleEvent(this, type, data);for (LifecycleListener listener : lifecycleListeners) {    listener.lifecycleEvent(event);}    }

    已經針對Listener相關的處理方法

         // 添加監聽器    @Override    public void addLifecycleListener(LifecycleListener listener) {lifecycleListeners.add(listener);    }    // 查找所有的監聽并轉換為了數組類型    @Override    public LifecycleListener[] findLifecycleListeners() {return lifecycleListeners.toArray(new LifecycleListener[0]);    }    // 移除某個監聽器    @Override    public void removeLifecycleListener(LifecycleListener listener) {lifecycleListeners.remove(listener);    }

    3.2 生命周期方法

    在LifecycleBase中最核心的還是實現了Lifecycle中的生命周期方法,以init方法為例我們來看。

        /**     * 實現了 Lifecycle 中定義的init方法     * 該方法和對應的組件的狀態產生的關聯     * @throws LifecycleException     */    @Override    public final synchronized void init() throws LifecycleException {if (!state.equals(LifecycleState.NEW)) {    // 無效的操作  只有狀態為 New 的才能調用init方法進入初始化    invalidTransition(Lifecycle.BEFORE_INIT_EVENT);}try {    // 設置狀態為初始化進行中....同步在方法中會觸發對應的事件    setStateInternal(LifecycleState.INITIALIZING, null, false);    initInternal(); // 交給子類具體的實現 初始化操作    // 更新狀態為初始化完成 同步在方法中會觸發對應的事件    setStateInternal(LifecycleState.INITIALIZED, null, false);} catch (Throwable t) {    handleSubClassException(t, "lifecycleBase.initFail", toString());}    }

    源碼解析:

    • 我們看到首先會判斷當前對象的state狀態是否為NEW,因為init方法只能在NEW狀態下才能開始初始化
    • 如果1條件滿足則會更新state的狀態為 INITIALIZED 同時會觸發這個事件
    • 然后initInternale()方法會交給子類具體去實現,
    • 等待子類處理完成后會把狀態更新為 INITIALIZED

    我們可以進入setStateInternal方法查看最后的關鍵代碼:

    // ....this.state = state; // 更新狀態// 根據狀態和事件的綁定關系獲取對應的事件String lifecycleEvent = state.getLifecycleEvent();if (lifecycleEvent != null) {    // 發布對應的事件    fireLifecycleEvent(lifecycleEvent, data);}

    可以看到和對應的事件關聯起來了。init方法的邏輯弄清楚后,你會發現start方法,stop方法,destory方法的處理邏輯都是差不多的,可自行觀看。

    而對應的 initInternal()方法的邏輯我們需要在 Server Service Engine Connector等核心組件中再看,這個我們會結合Tomcat的啟動流程來帶領大家一起查看。

    以上就是Tomcat生命周期詳解的詳細內容,更多關于Tomcat生命周期的資料請關注其它相關文章!

    標簽: Tomcat
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    国产精品毛片| 亚洲资源av| 久久久久97| 国内在线观看一区二区三区| 久久精品三级| 欧美片第1页| 美女网站一区| 亚洲一区二区三区久久久| 欧美片第1页综合| 97精品中文字幕| 久久精品导航| 日韩精品一级中文字幕精品视频免费观看| 亚洲人亚洲人色久| 麻豆精品av| 99精品网站| 国产日韩欧美一区二区三区在线观看| 91视频一区| 国产精品日本欧美一区二区三区| 亚洲精品进入| 岛国精品一区| 欧美日韩国产探花| 国产欧美日韩在线一区二区| 高清日韩欧美| 亚洲欧美不卡| 欧美黑人做爰爽爽爽| 国产v日韩v欧美v| 免费日韩一区二区| 国产精品巨作av| 女人天堂亚洲aⅴ在线观看| 国产一卡不卡| 91精品91| 麻豆国产欧美一区二区三区| 午夜久久美女| 国产精品hd| 国产一级一区二区| 精品日韩一区| 日本亚洲三级在线| 天堂资源在线亚洲| 国产亚洲精品美女久久久久久久久久| 91看片一区| 欧美在线不卡| 激情丁香综合| 久久久久伊人| 亚洲精品国产精品粉嫩| 黑人精品一区| 国产欧美自拍一区| 久久国产成人| 激情欧美丁香| 福利片在线一区二区| 91在线成人| 99国产精品自拍| 色婷婷综合网| 欧美日本久久| 亚洲精品欧洲| 午夜久久福利| 成人污污视频| 欧美另类中文字幕 | 天堂网在线观看国产精品| 国产精品欧美三级在线观看| 亚洲成人三区| 97精品97| 久久精品欧洲| 欧美在线不卡| 免费看欧美美女黄的网站| 国产一区二区三区四区二区| 日韩欧美久久| 久久福利毛片| 成人精品亚洲| 高清av一区| 国产精品久久乐| 亚洲乱码一区| 亚洲综合精品| 狠狠干成人综合网| 亚洲午夜久久久久久尤物| 国产一区精品福利| 国产精品日韩精品在线播放| 日韩欧美精品一区二区综合视频| 在线精品视频在线观看高清| 98精品视频| 国产va在线视频| 色欧美自拍视频| 久久精品免费看| 国产精品草草| 久久久久观看| 精品国产一区二区三区2021| 精品一区二区三区视频在线播放| 国产伦精品一区二区三区千人斩| 日韩福利视频一区| 日韩精品视频网| 一区二区精品| 中文字幕av一区二区三区四区| 日韩精品一级二级| 亚洲理论在线| 亚洲精品免费观看| 日韩精品视频中文字幕| 日韩中文av| 日韩精品中文字幕吗一区二区| 久久夜色精品| 日韩精品1区2区3区| 青青青国产精品| 国产毛片一区二区三区| 国产精品3区| 精品视频高潮| 日韩精品2区| 91精品二区| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久免费精品| 精品视频一区二区三区四区五区| 麻豆国产欧美日韩综合精品二区| 久久久久黄色| 久久久精品五月天| 亚洲国产不卡| 日韩欧美中文字幕一区二区三区| 欧美一区免费| 91青青国产在线观看精品| 欧美成人高清| 日韩精品视频中文字幕| 免费看久久久| 伊人久久国产| 久久国产精品久久w女人spa| 日本不卡视频一二三区| 欧美极品中文字幕| 日韩精品一区二区三区免费观影| 不卡一区2区| 涩涩涩久久久成人精品| 国产精品www.| 国产主播一区| 日本综合视频| 国产福利91精品一区二区| 999国产精品| 亚洲免费毛片| 国产成人精品福利| 好看不卡的中文字幕| 欧美精品影院| 久久国产电影| 欧美精品国产| 国产精品99一区二区| 欧美精品国产一区| 日韩在线观看| 日韩美女精品| 香蕉视频亚洲一级| 亚洲精品视频一二三区| 久久精品色播| 午夜一区在线| 黄毛片在线观看| 日韩欧美四区| 久久亚洲国产| 麻豆国产欧美一区二区三区| 欧美日韩激情| 国产精品videossex| 国产精品88久久久久久| 国产日产精品_国产精品毛片| 久久狠狠婷婷| 国产欧美日韩| 欧美专区在线| 亲子伦视频一区二区三区| 欧美欧美黄在线二区| 亚洲天堂黄色| 国产一区二区视频在线看| 日韩中文字幕不卡| 综合日韩av| 国产毛片一区二区三区| 国产精品老牛| 91精品国产成人观看| 欧美xxxx性| 日本不卡中文字幕| 99香蕉国产精品偷在线观看| 精品久久电影| 亚洲综合福利| 亚洲黄页一区| 91精品国产福利在线观看麻豆| 国产精品欧美日韩一区| 首页欧美精品中文字幕| 91精品综合| av综合电影网站| 国产精品草草| 日本强好片久久久久久aaa| 91精品二区| 日韩欧美一区二区三区免费观看| 国产精品白丝久久av网站| 中文无码久久精品| 欧美日韩三区| 欧美 日韩 国产一区二区在线视频| 国产精品久久久久77777丨| 亚洲精品一级| 亚洲一区国产一区| 蜜臀av免费一区二区三区| 国产精品成人a在线观看| 国产乱码精品一区二区三区亚洲人 | 欧美成a人片免费观看久久五月天| 免费日本视频一区| 国产精品88久久久久久| 成人一区不卡| 成人在线视频免费| 久久精品网址| 久久99精品久久久野外观看| 亚洲精品大全| 亚洲精品美女91| 日韩一区二区三区免费视频 | 国产suv精品一区|