Connector實(shí)例的創(chuàng)建已經(jīng)在Spring Boot啟動(dòng)過程(四):Spring Boot內(nèi)嵌Tomcat啟動(dòng)中提到了:
Connector是LifecycleMBeanBase的子類,先是設(shè)置LifecycleState為LifecycleState.NEW,構(gòu)造首先執(zhí)行setProtocol,設(shè)置protocolHandlerClassName為"org.apache.coyote.http11.Http11NioProtocol"事實(shí)上它默認(rèn)值就是這個(gè),然后通過反射創(chuàng)建此協(xié)議處理器的實(shí)例,此時(shí)開始執(zhí)行Http11NioProtocol的構(gòu)造函數(shù):
public Http11NioProtocol() { super(new NioEndpoint()); }
初始化NioEndpoint過程中初始化了NioSelectorPool,NioSelectorShared默認(rèn)為true,即所有的SocketChannel共享一個(gè)Selector;設(shè)置pollerThreadCount,socket超時(shí)時(shí)間等。然后就是將new出來的NioEndPoint一路super,直到AbstractProtocol:
public AbstractProtocol(AbstractEndpoint<S> endpoint) { this.endpoint = endpoint; setSoLinger(Constants.DEFAULT_CONNECTION_LINGER); setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY); }
關(guān)于soLinger可以參考內(nèi)嵌Tomcat的Connector對象的靜態(tài)代碼塊。之后是外層AbstractHttp11Protocol的構(gòu)造函數(shù),Handler就是這里初始化并set的,這部分和上一塊所有的set最后都是到endpoint的:
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式