TOMCAT源码分析-事件与监听

开篇

  作为Tomcat生命周期的补充,解释下事件的触发。


源码部分

  • 每个容器由于继承自LifecycleBase,当容器状态发生变化时都会调用fireLifecycleEvent方法生成LifecycleEvent,并且交由此容器的事件监听器处理。

  • 通过addLifecycleListener添加事件监听器添加到全局的lifecycleListeners。

  • 通过LifecycleBase的fireLifecycleEvent方法来触发。

public abstract class LifecycleBase implements Lifecycle {

    private final List<LifecycleListener> lifecycleListeners = 
                                   new CopyOnWriteArrayList<>();

    public void addLifecycleListener(LifecycleListener listener) {
        lifecycleListeners.add(listener);
    }

    protected void fireLifecycleEvent(String type, Object data) {
        LifecycleEvent event = new LifecycleEvent(this, type, data);
        for (LifecycleListener listener : lifecycleListeners) {
            listener.lifecycleEvent(event);
        }
    }

}


事件的触发机制

说明:

  • 1、Tomcat的fireLifecycleEvent的上层会通过startInternal()、stopInternal()、setStateInternal()进行调用。



说明:

  • 1、setStateInternal()方法内部会调用fireLifecycleEvent()方法。

  • 2、在LifecycleBase的内部的init()、stop()、start()、destroy()等方法内部都是触发事件执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,556评论 1 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,159评论 1 32
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 12,333评论 6 86
  • 1、定义和初始化 定义一个集合S,分别为:不初始化,用集合S1初始化,用迭代器初始化。2、set的插入,只能使用i...
    alexsssu阅读 911评论 0 0
  • 时光机, 请带我去往被孕育的日子, 让我看到喜悦与期待, 那是的你们有多幸福, 时光机, 请带我去往降生的时候, ...
    骆浮生阅读 261评论 0 2