生命周期

tomcat开发者将Catalina中的各种组件的启动、关闭行为,都抽象为一个接口org.apache.catalina.Lifecycle,进而可以在管理生命周期相关行为时面向接口编程。
通过实现Lifecycle接口完成单一启动/关闭机制,并且以一种优雅的方式(观察者模式)向其他组件发送事件消息。

Lifecycle接口

Catalina在设计上允许一个组件包含其他组件,父级组件负责启动/关闭它的子组件,这样的层层设计,使得所有的组件都置于顶级组件的监护下,这样Catalina的启动类只需要启动一个组件,就可以将全部的应用组件都启动起来。

1
2
3
4
5
6
7
8
9
public interface Lifecycle {
// 几种关于启动、停止的事件名称
static final String START_EVENT = "start";
void addLifecycleListener(LifecycleListener listener);
LifecycleListener[] findLifecycleListeners();
void removeLifecycleListener(LifecycleListener listener);
void start() throws LifecycleException;
void stop() throws LifecycleException;
}

LifecycleEvent类

通知实现了Lifecycle接口的组件上的监听者组件发生了变化的通用event类。

1
2
3
4
5
6
7
8
9
public final class LifecycleEvent extends EventObject{
// properties
// 关联在事件上的数据
private Object data;
// 事件发生的Lifecycle
private Lifecycle lifecycle;
// 事件实例的类型
private String type;
}

LifecycleListener接口

定义了组件生命周期事件的监听者

1
2
3
public interface LifecycleListener {
void lifecycleEvent(LifecycleEvent event);
}

LifecycleSupport类

一个帮助管理监听者,并触发相应生命周期事件的Support类。

1
2
3
4
5
6
7
8
9
public final class LifecycleSupport{
private Lifecycle lifecycle = null;
// 已注册的事件监听者集合,用一定的同步机制管理它的增删改查
private LifecycleListener listeners[] = new LifecycleListener[0];
public void addLifecycleListener(LifecycleListener listener){}
public void removeLifecycleListener(LifecycleListener listener){}
public LifecycleListener[] findLifecycleListeners(){}
public void fireLifecycleEvent(String type, Object data) {}
}