Appearance
全局模块和生命周期
全局模块
模块导出 provider,另一个模块需要 imports 它才能用这些 provider。
如何设置全局的provider呢?可以使用@Golbal() 来声明一个全局模块
js
@Golbal()
@Module({
providers: [
AaaService,
BbbService
],
exports: [
AaaService,
BbbService
]
})
export class AppModule {}@Golbal()
@Module({
providers: [
AaaService,
BbbService
],
exports: [
AaaService,
BbbService
]
})
export class AppModule {}然后其他模块就不需要imports来导入模块了。可以直接使用它里面的 Service
生命周期
1. 应用初始化阶段
递归初始化模块,会依次调用模块内的 controller、provider 的
onModuleInit方法,然后再调用 module 的onModuleInit方法。全部初始化完之后,再依次调用模块内的 controller、provider 的
onApplicationBootstrap方法,然后调用 module 的onApplicationBootstrap方法
- onModuleInit 需要实现 OnModuleInit 接口
- onApplicationBootstrap 需要实现 OnApplicationBootstrap 接口
2. 应用销毁阶段
先调用每个模块的 controller、provider 的
onModuleDestroy方法,然后调用 Module 的onModuleDestroy方法。之后再调用每个模块的 controller、provider 的
beforeApplicationShutdown方法,然后调用 Module 的beforeApplicationShutdown方法。停止监听网络端口, 之后调用每个模块的 controller、provider 的
onApplicationShutdown方法,然后调用 Module 的onApplicationShutdown方法。
- onModuleDestroy 需要实现
OnModuleDestroy接口 - beforeApplicationShutdown 需要实现
BeforeApplicationShutdown接口 - onApplicationShutdown 需要实现
OnApplicationShutdown接口
beforeApplicationShutdown 和 onApplicationShutdown 区别是,前者可以获取到 signal 系统信号的,比如 SIGTERM