【问题标题】:Why use @singleton instead using simply object为什么使用 @singleton 而不是简单地使用对象
【发布时间】:2019-12-18 16:56:39
【问题描述】:

在 Kotlin 中,object 的常见用途是将其用于单例,例如:

object MyObject {
   ...
}

但是,在使用 micronaut 框架时,官方文档建议使用如下内容:

@Singleton
class V8Engine : Engine {

  override var cylinders = 8
  override fun start(): String {
    return "Starting V8"
  }
}

为什么我不能使用简单的对象而不是使用注释@Singleton 和一个类?

【问题讨论】:

    标签: kotlin micronaut


    【解决方案1】:

    使用@Singleton,Micronaut 可以自动管理 bean 之间的依赖关系。如果你和https://docs.micronaut.io/latest/guide/ioc.html#beans中的其他类一起去,翻译成Kotlin:

    @Singleton
    class Vehicle(private val engine: Engine) {
        public fun start() = engine.start()
    }
    
    1. 它不能只是一个object,因为它带有一个参数。

    2. Micronaut 发现此参数是 V8Engine 的单例实例,它需要 that@Singleton 而不是 object

    当然,在这种情况下,您可以直接在Vehicle 中使用V8Engine;但更容易改变,例如如果您希望 Engine 不再是单身人士。

    【讨论】:

      【解决方案2】:

      为什么我不能使用简单的对象而不是使用注解@Singleton 上课吗?

      您可以使用 object 而不是将 @Singleton 与类一起使用。 Micronaut 不会为您管理实例,但这是允许的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        • 2022-11-30
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        相关资源
        最近更新 更多