zoukankan      html  css  js  c++  java
  • [笔记]深入剖析Tomcat-生命周期,日志记录器

    lifecycle接口

    实现lifecycle接口的组件启动或关闭时可以触发before_start_event, start_event...stop_event...事件,管理生命周期

    public interface Lifecycle{
        public void addLifecycleListener(LifecycleListener listener);
        public LifecycleListener[] findLifecycleListener();
        public void removeLifecycleListener(LifecycleListener listener);
        public void start();
        public void stop();
    }

    LifecycleEvent

    public final class LifecycleEvent extends EventObject{
        private Object data= null;
        private Lifecycle lifecycle = null;
        private String type = null;
        //...
        public LifecycleEvent(Lifecycle lifecycle, String type, Object data){
            ...
        }
    }

    LifecycleListener

    public interface LifecycleListener{
        public ovid lifecycleEvent(LifecycleEvent event);//触发event事件
    }

    LifecycleSupport,实现了Lifecycle接口,将所有注册的事件监听器存储到一个数组中,帮助组件管理监听器,并触发相应的生命周期

    public final class LifecycleSupport{
        private Lifecycle lifecycle = null;
        private LifecycleListener[] listeners = new LifecycleListener[0];
        
        public LifecycleSupport(Lifecycle lifecycle){
            //...
        }
        public void addLifecycleListener(LifecycleListener listener){
            //add listener to listeners
        }
        //findLifecycleListenres()
        //removeLifecycleListener
        public void fireLifecycleEvent(String type, Object data){
            LifecycleEvent event = new LifecycleEvent(lifecycle, type, data);
            //trigger listeners lifecycleEvent method
        }
    }
    public class SimpleContext implements Context, Container, Lifecycle{
       //...
        protected LifecycleSupport = new LifecycleSupport(this);
        public synchronized void start{
            if (started){
                started = true;
                lifecycle.fireLifycycleEvent(BEFORE_START_EVENT, null);
                if(loader instanceof Lifecycle){
                    loader.start();
                }
                if(pipeline instanceof Lifecycle){
                    pipeline.start();
                }
                Container[] children = findChidren();
                for (Container child : children){
                    if(child instanceof Lifecycle){
                        child.start();
                    }
                }
                lifecycle.fireLifycycleEvent(START_EVENT, null);
            }
            lifecycle.fireLifycycleEvent(AFTER_START_EVENT, null);
        }
        //public void stop as start method
    }
  • 相关阅读:
    设计模式 -- 中介者设计模式 (Mediator Pattern)
    java.lang.IllegalArgumentException: View not attached to window manager
    项目中处理android 6.0权限管理问题
    Python File.readlines() 方法
    notepad++快捷键
    ora-00054:resource busy and acquire with NOWAIT specified
    空格和TAB键混用错误:IndentationError: unindent does not match any outer indentation level
    Notepad++编辑Pyhton文件的自动缩进的问题(图文)
    echoawksed eecurl的使用-shell
    python正则表达式
  • 原文地址:https://www.cnblogs.com/zengyou/p/2841391.html
Copyright © 2011-2022 走看看