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.哈哈,这个也是为什么我先前矛盾了,怎么看都看不懂,外国人的书,就是不爽。

  • 相关阅读:
    基于MPI计算π值
    依赖倒转原则
    里氏代换原则
    开闭原则
    以太坊入门-solidity环境搭建
    【owner】today,last second day
    105-算法应用【N皇后问题】代码实现
    【Java小工具】节点选举Demo
    【加密算法】MD5、SHA算法加密工具类
    50-数据结构【原码、反码和补码】计算机数表示方法
  • 原文地址:https://www.cnblogs.com/baoguo/p/1329687.html
Copyright © 2011-2022 走看看