http://www.iocoder.cn/Tomcat/yuliu/Start-analysis-4-components-int-and-start-method/
上回讲到,catalina的load和start会调用StandardServer的load和start。我们看到StandardServer
的继承链:
LifecycleBase
中实现了init
和start
的方法。
init
和 start
方法的定义可以看到这两个方法最终将会调用子类中定义的 initInternal
和 startInternal
。initInternal
和startInternal
在StandardServer中有定义。它们将循环调用Server类里内置的Service数组的init
方法和start
方法。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
的核心概念了,后文会讲述。