Lifecycle,即生命周期,是Tomcat中各个组件都需要继承的一部分。
采用了经典的设计模式-观察者模式。所有继承了他的组件,都被视为被观察的对象,观察者通过addLifecycleListener()加入到观察者队列中,当组件的状态(state)改变,就会触发(fire)观察者队列。
1、Lifecycle接口
从图中可以清楚的看到接口的设计目的,定义所有状态的值,提供初始化,开始,结束,销毁等方法。
2、LifecycleBase
该类为实现了Lifecycle的抽象类。
对初始化,开始,结束提供了实现方法。
在方法的开始和结束时,会通过setStateInternal()设置当前组件的状态,状态改变后会通过fireLifecycleEvent通知观察者队列
在2次状态改变之中,会调用XXXXInternal()方法,每个组件会有该方法的实现。
3、LifecycleSupport
生命周期的辅助类,主要保存观察者队列,以及对该队列进行操作。
//采用数组的方式保存观察者。
private LifecycleListener listeners[] = new LifecycleListener[0];
//当队列改变时采用该属性当作锁。
private final Object listenersLock = new Object();
public void fireLifecycleEvent(String type, Object data) {
//遍历队列,根据状态(事件类型)触发事件。
LifecycleEvent event = new LifecycleEvent(lifecycle, type, data);
LifecycleListener interested[] = listeners;
for (int i = 0; i < interested.length; i++)
interested[i].lifecycleEvent(event);
}
4、LifecycleMBeanBase
继承了LifecycleBase,实现了MBeanRegistration。
看到了MBean,就应该想到该类应该和JMX会有关系。
主要是提供了设置JMX注册所需的基本属性,domain,oname,server以及提供了注册的方法register();
到这里。Lifecycle内容已经完成。各个组件只需要继承LifecycleMBeanBase就可以完成观察者模式以及JMX注册。