• 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);
    
        }
    
    
    }
    
  • 相关阅读:
    idea 管理java 多module的工程
    协程与函数线程异步的关系
    HDU 5640 King's Cake【模拟】
    逻辑运算
    Silverlight 学习笔记——布局 Evil 域 博客园
    ExtJS 日期格式问题
    偏方收藏(此信息为本人收藏,安全性无法验证,使用后产生的一些后果自负)
    form和column:extJS的布局
    Sqlserver 通用存储过程分页
    Ext中TreePanel控件和TabPanel控件搭配测试
  • 原文地址:https://www.cnblogs.com/danzZ/p/13998871.html
Copyright © 2020-2023  润新知