You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Toothpick注解实现分片级自定义作用域单例?

问题解答

该现象符合预期,原因如下:

  • 你调用supportScopeAnnotation(ShardSingleton::class.java)仅完成了作用域绑定配置:让shard1这类分片作用域可以识别@ShardSingleton注解,将标记了该注解的类归入当前分片作用域的管理范围,但没有将自定义的@ShardSingleton注册为框架认可的单例标识注解。
  • 依赖注入框架的内置@Singleton是默认的单例标记,只有类标记了该注解,框架才会在对应的作用域内做实例缓存,实现单例效果。仅添加@ShardSingleton的情况下,框架只会将类归入对应分片作用域,每次请求实例都会重新创建,因此需要同时搭配@Singleton才能实现分片内单例。

优化方案(仅需@ShardSingleton即可实现分片单例)

你可以在框架全局初始化阶段,将@ShardSingleton注册为官方认可的单例作用域注解,无需再额外添加@Singleton,参考配置如下:

KTP.configure {
    // 将自定义注解注册为单例标识
    addSingletonAnnotation(ShardSingleton::class.java)
}

配置完成后,如下声明即可实现对应分片内的单例效果:

@ShardSingleton
@InjectConstructor
class FooDAO(val dbClient: DBClient)

内容的提问来源于stack exchange,提问作者bfreuden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:45:00