tomcat启动分析(4)StandardServer的load和start

2022-01-07 20:57:15 浏览数 (1)

参考

http://www.iocoder.cn/Tomcat/yuliu/Start-analysis-4-components-int-and-start-method/

LifecycleBase

上回讲到,catalina的load和start会调用StandardServer的load和start。我们看到StandardServer的继承链:

  1. LifecycleBase中实现了initstart的方法。 initstart 方法的定义可以看到这两个方法最终将会调用子类中定义的 initInternalstartInternal
  2. initInternalstartInternal在StandardServer中有定义。它们将循环调用Server类里内置的Service数组的init方法和start方法。
  3. 按上面的分析,接下来将会调用 StandardService 类的 init 和 start 方法,实际上这个类也是 LifecycleBase 类的子类,所以最终的也会调用本类中的initInternalstartInternal方法。

别的组件也是类似,层层向里调用

总结

附上一个结构图:

org.apache.catalina.core.StandardServer、org.apache.catalina.core.StandardService、org.apache.catalina.connector.Connector、org.apache.catalina.core.StandardEngine、org.apache.catalina.core.StandardHost、org.apache.catalina.core.StandardContext 等等组件都维护了成员变量,进行引用。关系为1对1,或者1对多。

一个组件调用init方法时,会进而调用initInternal。在initInternal内部会对其包含的子组件依次调用init方法。形成层层调用,最终完成每个组件的生命周期。

说到生命周期,我们发现上述组件都是LifecycleBase的子类,而LifecycleBase又是Lifecycle的子类。Lifecycle顾名思义,就是生命周期,说明组件都遵循生命周期运作。

这就是Lifecycle的核心概念了,后文会讲述。

0 人点赞