🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓
- GitHub - apihug/apihug.com: All abou the Apihug
- apihug.com: 有爱,有温度,有质量,有信任
- ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace
The Next Generation API Development Platform - ApiHug
初始化过程
SpringApplicationAnnotationConfigReactiveWebServerApplicationContextNettyReactiveWebServerFactoryWebServerWebServerStartStopLifecycle封装 HttpHandler创建 HttpServeronRefresh 启动应用上下文createWebServer 创建Web服务new 创建封装WebServer到WebServerStartStopLifecycle控制start(启动)stop(关闭)SpringApplicationAnnotationConfigReactiveWebServerApplicationContextNettyReactiveWebServerFactoryWebServerWebServerStartStopLifecycle
#入口
ReactiveWebServerApplicationContext#onRefresh
ReactiveWebServerApplicationContext#createWebServer
//ReactiveWebServerApplicationContext
private void createWebServer() {
WebServerManager serverManager = this.serverManager;
if (serverManager == null) {
StartupStep createWebServer = this.getApplicationStartup().start("spring.boot.webserver.create");
String webServerFactoryBeanName = getWebServerFactoryBeanName();
ReactiveWebServerFactory webServerFactory = getWebServerFactory(webServerFactoryBeanName);
createWebServer.tag("factory", webServerFactory.getClass().toString());
boolean lazyInit = getBeanFactory().getBeanDefinition(webServerFactoryBeanName).isLazyInit();
/*【1】*/this.serverManager = new WebServerManager(this, webServerFactory, this::getHttpHandler, lazyInit);
/*【2】*/getBeanFactory().registerSingleton("webServerGracefulShutdown",new WebServerGracefulShutdownLifecycle(this.serverManager.getWebServer()));
/*【3】*/getBeanFactory().registerSingleton("webServerStartStop",new WebServerStartStopLifecycle(this.serverManager));
createWebServer.end();
}
initPropertySources();
}
- 【1】 创建一个
WebServerManager
注意这里的this::getHttpHandler
- 【2】 封装到 GracefulShutdown :
WebServerGracefulShutdownLifecycle
, 关闭资源清理。 - 【3】 封装到 Lifecycle :
WebServerStartStopLifecycle
, 基本的启动,关闭监听触发。
所以这里的 this::getHttpHandler
以 callback 给组装程序 WebServerManager
: Supplier<HttpHandler> handlerSupplier
;
后被封装在: this.handler = new DelayedInitializationHttpHandler(handlerSupplier, lazyInit);
, 参考实现: WebServerManager
:
//WebServerManager
WebServerManager(ReactiveWebServerApplicationContext applicationContext, ReactiveWebServerFactory factory,
Supplier<HttpHandler> handlerSupplier, boolean lazyInit) {
this.applicationContext = applicationContext;
Assert.notNull(factory, "Factory must not be null");
this.handler = new DelayedInitializationHttpHandler(hand