• [笔记]深入剖析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
    }
  • 相关阅读:
    Eclipse添加jsp页面后引入java指令报错解决方法
    Spring使用RowMapper将数据中的每一行封装成用户定义的类
    Spring使用jdbcJdbcTemplate和三种方法配置数据源
    下载windows版本apache网页服务器
    配置tomcat-users
    找到MySQL配置文件默认路径
    网络爬虫技术
    爬虫具体问题
    分布式爬虫调度策略
    爬虫进阶
  • 原文地址:https://www.cnblogs.com/zengyou/p/2841391.html
Copyright © 2020-2023  润新知