洞察如何通过低成本家政服务app实现高效管理与数字化转型
736
2022-09-14
springboot web - 启动(4) tomcat(springboot starter工作原理)
接第二篇
第二篇里面, 看到容器创建的是 AnnotationConfigServletWebServerApplicationContext 类型.
一 .类图
二. 构造
构造函数中, 创建了三个类, 并赋值给相应的属性.
三. 启动 tomcat
这里我主要是想要了解tomcat启动, 所以一些方法, 就先不看.
1. onRefresh()
onRefresh() 方法执行的是 ServletWebServerApplicationContext 的方法.
createWebServer() 方法中, 会创建 Tomcat 类.
getWebServer方法里面, 就创建了 Tomcat 类, 并对其进行一些配置操作.
这里的 protocol 是有一个默认值的:
public static final String DEFAULT_PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol";
private String protocol = DEFAULT_PROTOCOL;
可以看到, 这里默认使用的是 同步非阻塞io协议. 需要注意的是, 在 new Connector() 的时候 对 Http11NioProtocol 进行了反射实例化.
public Http11NioProtocol() {
super(new NioEndpoint());
}
在实例化的时候, new 了一个 NioEndpoint. 这个东西很重要, 后面会看到.
getTomcatWebServer()
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
return new TomcatWebServer(tomcat, getPort() >= 0);
}
在创建 TomcatWebServer 的时候, 就会启动 Tomcat
2. finishRefresh()
ServletWebServerApplicationContext 重写了该方法.
startWebServer()
addPreviouslyRemovedConnectors()
service 在绑定 Connector 的时候, 会启动 Connector
看一下 connector.start() 方法.
startInternal() 是一个抽象方法, 其中的一个实现类 Connector
接着进 start() 方法
endPoint.start() 方法:
这个bind() 执行的是NioEndpoint 中的方法, 进行端口绑定监听.
总结:
从执行流程上来看,
1. 在onRefresh() 中, 启动Tomcat
2. 在 finishBeanFactoryInitialization() 中进行了后台方法的路由映射(待续)
3. 在finishRefresh()中进行了端口绑定监听
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~