zoukankan      html  css  js  c++  java
  • Lifecycle总结

    原理是这样的:

    1.     SimpleContext注册一个事件

    ex06.pyrmont.startup. Bootstrap中:

    LifecycleListener listener = new SimpleContextLifecycleListener();

     ((Lifecycle) context).addLifecycleListener(listener);

    实际执行的是:

    org.apache.catalina.util. LifecycleSupport

        public void addLifecycleListener(LifecycleListener listener) {

          synchronized (listeners) {

              LifecycleListener results[] =

                new LifecycleListener[listeners.length + 1];

              System.out.println("=====listeners.length:"+listeners.length);

              for (int i = 0; i < listeners.length; i++)

                  results[i] = listeners[i];

              results[listeners.length] = listener;

             

              System.out.println("=====results.length:"+results.length);

             

              listeners = results;

          }

    2.通知执行事件

    lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null);

     

    实际执行的是:

    org.apache.catalina.util. LifecycleSupport

     

        public void fireLifecycleEvent(String type, Object data) {

            LifecycleEvent event = new LifecycleEvent(lifecycle, type, data);

            LifecycleListener interested[] = null;

            synchronized (listeners) {

                interested = (LifecycleListener[]) listeners.clone();

            }

            System.out.println("========interested.length"+interested.length);

            for (int i = 0; i < interested.length; i++)

                interested[i].lifecycleEvent(event);

        }

    3.执行事件

    由2中的 interested[i].lifecycleEvent(event);调用:

    ex06.pyrmont.core. SimpleContextLifecycleListener中的

     public void lifecycleEvent(LifecycleEvent event) {

        Lifecycle lifecycle = event.getLifecycle();

        System.out.println("SimpleContextLifecycleListener's event " + event.getType().toString());

        if (Lifecycle.START_EVENT.equals(event.getType())) {

          System.out.println("Starting context.");

        }

        else if (Lifecycle.STOP_EVENT.equals(event.getType())) {

          System.out.println("Stopping context.");

        }

     }

    小结:在上面的三个事件中,请务必记住,我们注册事件是在SimpleContext中,其他的虽然继承了Lifecycle,也回去执行步骤2,但是那个时候2的数组是空的,所以,根本不会去执行步骤3.哈哈,这个也是为什么我先前矛盾了,怎么看都看不懂,外国人的书,就是不爽。

  • 相关阅读:
    协程-Greenlet
    协程简介-异步IO
    关于__name__=='__main__
    进程池-限制同一时间在CPU上运行的进程数
    STM32丰富的资料网站(库函数手册)
    STM32CubeMX入门之点亮板载LED
    STM32CUBEMX忘记配置sys中的debug导致程序只能下载一次的问题
    GX Works2 存储器空间或桌面堆栈不足 解决方案
    Lua安装报错:编译 Lua 报错:error: readline/readline.h: No such file or directory 问题解决办法
    Ubuntu18.04不能联网问题
  • 原文地址:https://www.cnblogs.com/baoguo/p/1329687.html
Copyright © 2011-2022 走看看