Tomcat源码篇-简单到超乎想象的启动流程( 二 )


 
image.png
【Tomcat源码篇-简单到超乎想象的启动流程】  如果生命周期的内容不清楚,请看上一篇文章的介绍 。
4.start方法  最后我们来看下start方法的代码 。
public void start() throws Exception {if (catalinaDaemon == null) {init(); // 如果 catalinaDaemon 为空 初始化操作}// 获取的是 Catalina 中的 start方法Method method = catalinaDaemon.getClass().getMethod("start", (Class [])null);// 执行 Catalina 的start方法method.invoke(catalinaDaemon, (Object [])null);}  上面的代码逻辑也很清楚,就是通过反射的方式调用了Catalina对象的start方法 。所以进入Catalina的start方法中查看 。
public void start() {if (getServer() == null) {load(); // 如果Server 为空 重新 init 相关的组件}if (getServer() == null) {log.fatal("Cannot start server. Server instance is not configured.");return;}// Start the new server关键方法--->启动Servertry {getServer().start();} catch (LifecycleException e) {// 省略...}// 省略...// Register shutdown hook注册关闭的钩子if (useShutdownHook) {// 省略...}if (await) {await();stop();}}  通过上面的代码我们可以发现核心的代码还是getServer.start()方法,也就是通过Server对象来嵌套的调用相关注解的start方法 。

Tomcat源码篇-简单到超乎想象的启动流程

文章插图
 
image.png
5.核心流程的总结我们可以通过下图来总结下Tomcat启动的核心流程
Tomcat源码篇-简单到超乎想象的启动流程

文章插图
 
image.png
  从图中我们可以看到Bootstrap其实没有做什么核心的事情,主要还是Catalina来完成的 。
  本文只是从Tomcat的启动核心流程来讲解,还有些具体的实现细节没有介绍到,会在后续的文章中给大家细细到来,欢迎关注收藏哦!




推荐阅读