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

原文地址:https://www.cnblogs.com/baoguo/p/1329687.html