tomcat系列之五:Tomcat各个组件生命周期

一,Tomcat中各个组件的关系

1,组件有大有小,大组件管理小组件。比如Server管理Service,Service管理连接器和容器

2,组件有内有外,外层组件控制内层组件。比如外层组件连接器负责对外交流,外层组件调用内层组件完成业务功能

二,创建组件的顺序

先创建子组件,再创建父组件,然后把子组件 注入 到父组件中

先创建内层组件,再创建外层组件,然后把内层组件 注入 到外层组件中

三,如何实现统一管理组件的生命周期

1,LifeCycle接口

  每个组件都要经历创建,初始化,启动这几个过程(系统的不变点)。每个具体组件的初始化方法是不一样的(系统的变化点)。

所以,可以把不变点抽象出来成为一个接口,这个接口和生命周期有关,叫LifeCycle。接口中只定义方法:init(),start(),stop(),destory()。然后每个具体的组件去实现这个方法。

在父组件的init()方法中需要创建子组件并调用子组件的init()方法。在父组件的start()方法里调用子组件的start()方法。这样只需要调用最顶层组件,调用Server组件的init()和start()方法。这样整个Tomcat就被启动起来了。

2,LifeCycle 事件

  组件的init(),start()调用是由它的父组件的状态变化触发的,上层组件的初始化会触发子组件的初始化,上层组件的启动会触发子组件的启动。可以把组件的生命周期定义成一个个状态,把状态的转变看做是一个事件。事件里有监听器,在监听器中实现一些逻辑,并且监听器也可以添加和删除。

  组件的生命周期:

NEW,INITIALIZING,INITIALIZED,STARTING_PERP,STARTING,STARTED。  

  LifeCycle接口

void init()
void start()
void stop()
void destory()
void addLifecycleListener(LifecycleListener)  添加监听器
void removeLifecycleListener(LifecycleListener)  移除监听器

当组件达到响应的状态,就触发响应的事件。比如NEW状态表示组件刚被实例化。当init()方法被调用时,状态就变成INITIALIZING状态,这时,会触发BEFOREinit_event事件,如果有监听器在监听这个事件,它的方法会被调用。

3,LifeCycleBase 抽象基类

定义一些抽象方法,基类不去实现这些方法。子类去实现这些方法。

LifeCycleBase:

abstract void initInternal()
abstract void startInternal()
abstract void stopInternal()
abstract void destoryInternal()

LifeCycleBase抽象类实现了LifeCycle接口中的所有方法,还定义了抽象方法交给子类去实现,这就是模板设计模式。LifeCycle调用了抽象方法来实现骨架逻辑。

 

posted @ 2019-06-05 10:26  inspire0x001  阅读(568)  评论(0编辑  收藏  举报