zoukankan      html  css  js  c++  java
  • How tomcat works(深入剖析tomcat)生命周期Lifecycle

    How Tomcat Works (6)生命周期Lifecycle

    总体概述

    这一章讲的是tomcat的组件之一,LifeCycle组件,通过这个组件可以统一管理其他组件,可以达到统一启动/关闭组件的目的,那么LifeCycle是如何实现看似如此神奇的功能的呢?

    实现了LifeCycle接口的组件,可以触发如下的事件

    • BEFORE_START_EVENT
    • START_EVENT
    • AFTER_START_EVENT
    • BEFORE_STOP_EVENT
    • STOP_EVENT
    • AFTER_STOP_EVENT

    而事件监听器LifeCycleListener,它监听到这些事件然后做出响应的举动,在这里就可以去统一的开启/关闭容器

    主要类以及接口

    LifeCycle接口

    public interface Lifecycle {
        /**
         * The LifecycleEvent type for the "component start" event.
         */
        //start事件,其实它就是个字符串
        public static final String START_EVENT = "start";
        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";
    
        //添加Listener
        public void addLifecycleListener(LifecycleListener listener);
    	//返回实现了这个接口的容器所绑定的listener
        public LifecycleListener[] findLifecycleListeners();
    	//移除某个listener
        public void removeLifecycleListener(LifecycleListener listener);
    	//lifecycle接口最重要的两个方法,组件必须提供这两个方法的实现,以供父组件调用,
        //实现父组件对于子组件的开启/关闭
        public void start() throws LifecycleException;
    
        public void stop() throws LifecycleException;
    
    
    }
    

    LifeEvent类

    生命周期事件是org.apache.catalina.LifecycleEvent类的实例,其实这个类也很简单,对于上面的String进行了一些包装,添加了一些额外的属性而已,类定义如下

    public final class LifecycleEvent
        extends EventObject {
        
        private Object data = null;
    
        private Lifecycle lifecycle = null;
    	//这里的type就对应lifecycle中定义的那6个事件
        private String type = null;
        
        public LifecycleEvent(Lifecycle lifecycle, String type) {
    
            this(lifecycle, type, null);
    
        }
        
        public LifecycleEvent(Lifecycle lifecycle, String type, Object data) {
    
            super(lifecycle);
            this.lifecycle = lifecycle;
            this.type = type;
            this.data = data;
    
        }
    
        public Object getData() {
    
            return (this.data);
    
        }
    
        public Lifecycle getLifecycle() {
    
            return (this.lifecycle);
    
        }
    
        public String getType() {
    
            return (this.type);
    
        }
    
    
    }
    
  • 相关阅读:
    剑指offer-第二章排序之年龄排序
    剑指offer—第二章算法之快速排序
    java小程序(课堂作业02)
    关于java的一些小知识(课程作业01)
    Java从命令行接受多个数字并求和
    《大道至简》第一章读后感及伪代码
    大道至简读后感
    GCPC 2013_A Boggle DFS+字典树 CSU 1457
    Aizu 2155 Magic Slayer 背包DP
    UVALive 4255 Guess
  • 原文地址:https://www.cnblogs.com/danzZ/p/13998871.html
Copyright © 2011-2022 走看看