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);
    
        }
    
    
    }
    
  • 相关阅读:
    efwplus框架
    注册区域
    社招面试记录与总结
    验证码 Captcha 之大插件
    发生内存泄漏?
    Flume+LOG4J+Kafka
    协议如何保证可靠传输
    oracle之spool详细使用总结(转)
    SSH协议详解(转)
    oracle nologging用法(转)
  • 原文地址:https://www.cnblogs.com/danzZ/p/13998871.html
Copyright © 2011-2022 走看看