Skip to content

具名bean: 通用

除了@Local之外,其他装饰器函数装饰的 class 都是具名bean。Zova 为此类 bean 提供了命名规范,既可以避免命名冲突,也有利于跨模块使用

从本质上来说,我们只需要通过一个通用的装饰器函数@Bean来定义所有的具名bean。其他装饰器函数都是派生自@Bean,目的是为了提供不同的缺省参数

@Bean

比如,要定义一个 store bean userInfo,可以有以下两种方式:

typescript
@Store()
export class StoreUserInfo {}
typescript
@Bean({ scene: 'store', name: 'userInfo', containerScope: 'app' })
export class StoreUserInfo {}
  • scene
    • Optional
    • 缺省值:bean
    • Bean 的场景值,用于对 Bean 进行归类
  • name
    • Optional
    • 缺省值:从 class name 自动解析
    • Bean 的名称
  • containerScope
    • Optional
    • 缺省值:ctx
    • 在其他 Bean 实例中注入本 Bean 时,如果没有明确指定 containerScope,就使用这里指定的值

Bean标识

在 Zova 中,一个模块就是一个天然的拆包边界,在 build 构建时,自动打包成一个独立的异步 Chunk

因此,在跨模块使用具名bean时,我们不建议直接基于类型注入,而是基于标识注入

系统会为每一个具名bean自动分配一个标识,格式如下:

bash
{moduleName}.{scene}.{name}

比如,前面创建的 store bean userInfo,对应的标识为:a-demo.store.userInfo,其中a-demouserInfo所归属的模块名称

装饰器清单

为了方便使用,并且简化代码,Zova 提供了几个派生的具名Bean:

名称说明scenedefault containerScope
@Bean通用装饰器beanctx
@ModelModel: 统一数据源modelctx
@Store全局状态对象storeapp
@Style全局样式styleapp
@ThemeThemethemeapp
@Tool工具Beantoolapp

基于 MIT 许可发布