Tomcat组件之间的静态关系

虚线表示一个请求在Tomcat中的流转
若想让一个系统能对外提供服务,需创建、组装并启动这些组件;在服务停止时,还需要释放资源,这是一个动态过程。即Tomcat需动态管理这些组件的生命周期。

当我们设计一个较大系统或框架时,也需要考虑:

如何统一管理组件的创建、初始化、启动、停止和销毁?
如何做到代码逻辑清晰?
如何方便地添加或者删除组件?
如何做到组件启动和停止不遗漏、不重复?
组件有大有小,大组件管理小组件,比如Server管理Service,Service又管理连接器和容器。
组件有外有内,外层组件控制内层组件,比如连接器是外层组件,负责对外交流,外层组件调用内层组件完成业务功能。即请求的处理过程由外层组件驱动。

这两层关系决定了系统在创建组件时应该遵循一定的顺序:

先创建子组件,再父组件,子组件需要被“注入”到父组件中
先创建内组件,再外组件,内组件要被“注入”到外组件
因此,最直观的做法就是将图上所有的组件按照先小后大、先内后外的顺序创建,然后组装。
这个思路其实很有问题:

代码逻辑混乱、组件遗漏
不利于后期的功能扩展
为了解决这个问题,我们希望找到一种通用的、统一的方法来管理组件的生命周期,就像汽车“一键启动”那样的效果。