参考
http://www.iocoder.cn/Tomcat/yuliu/Start-analysis-4-components-int-and-start-method/
LifecycleBase
上回讲到,catalina的load和start会调用StandardServer的load和start。我们看到StandardServer
的继承链:
- 在
LifecycleBase
中实现了init
和start
的方法。init
和start
方法的定义可以看到这两个方法最终将会调用子类中定义的initInternal
和startInternal
。 -
initInternal
和startInternal
在StandardServer中有定义。它们将循环调用Server类里内置的Service数组的init
方法和start
方法。 - 按上面的分析,接下来将会调用 StandardService 类的 init 和 start 方法,实际上这个类也是 LifecycleBase 类的子类,所以最终的也会调用本类中的
initInternal
和startInternal
方法。
别的组件也是类似,层层向里调用。
总结
附上一个结构图:
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
的核心概念了,后文会讲述。