跳至主要內容

全局模块和生命周期

黄曦2023年10月11日大约 1 分钟nestnest

模块导出 provider,另一个模块需要 imports 它才能用这些 provider。

但如果这个模块被很多模块依赖了,那每次都要 imports 就很麻烦。

@Global()直接申明成全局 Alt text

BbbModule 无需 imports. 直接在需要使用的地方注入(全局暴露的 AaaService)即可

生命周期:
Nest 在启动的时候,会递归解析 Module 依赖,扫描其中的 provider、controller,注入它的依赖。

全部解析完后,会监听网络端口,开始处理请求。

首先,递归初始化模块,会依次调用模块内的 controller、provider 的 onModuleInit 方法,然后再调用 module 的 onModuleInit 方法。

全部初始化完之后,再依次调用模块内的 controller、provider 的 onApplicationBootstrap 方法,然后调用 module 的 onApplicationBootstrap 方法

然后监听网络端口。

Alt text
Alt text
Alt text
Alt text
Alt text
Alt text

应用销毁的时候也同样有生命周期:

先调用每个模块的 controller、provider 的 onModuleDestroy 方法,然后调用 Module 的 onModuleDestroy 方法。

之后再调用每个模块的 controller、provider 的 beforeApplicationShutdown 方法,然后调用 Module 的 beforeApplicationShutdown 方法。

然后停止监听网络端口。

之后调用每个模块的 controller、provider 的 onApplicationShutdown 方法,然后调用 Module 的 onApplicationShutdown 方法。