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