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