Java Kotlin中的Spring注入引用

Java Kotlin中的Spring注入引用,java,spring,kotlin,Java,Spring,Kotlin,在Kotlin中,变量必须在声明时初始化,并且不能为null,除非在类型名称后附加了?。因此,打算由Spring注入的bean引用必须声明为: @AutoWired var someService: SomeService? = null 很明显,麻烦的是,从这里开始,无论使用什么服务,都必须指定某种空安全逻辑,无论是?:还是直接空检查 当然,我们可以做到: @AutoWired var someService = new SomeService() 但这并不总是可能的,而且一次性的实例只是

在Kotlin中,变量必须在声明时初始化,并且不能为
null
,除非在类型名称后附加了
。因此,打算由Spring注入的bean引用必须声明为:

@AutoWired
var someService: SomeService? = null
很明显,麻烦的是,从这里开始,无论使用什么
服务
,都必须指定某种空安全逻辑,无论是
?:
还是直接空检查

当然,我们可以做到:

@AutoWired
var someService = new SomeService()
但这并不总是可能的,而且一次性的实例只是让人困惑

我的问题是,是否有必要告诉Kotlin这个变量将被初始化,并且实际上不是
null

您有两个选择

1)使用构造函数注入

在我看来,构造函数注入是最好的方法,因为它明确声明必须设置依赖项来构造对象

2)将您的字段声明为lateinit

阅读文档中关于tht主题的更多信息:

延迟初始化的属性

通常,声明为具有非null类型的属性必须是 在构造函数中初始化。然而,通常情况下并非如此 方便。例如,可以通过以下方式初始化属性: 依赖注入,或在单元测试的设置方法中。在这个 在这种情况下,您不能在构造函数中提供非null初始值设定项,但 在引用属性时,仍然希望避免空检查 在类的主体内部

你有两个选择

1)使用构造函数注入

在我看来,构造函数注入是最好的方法,因为它明确声明必须设置依赖项来构造对象

2)将您的字段声明为lateinit

阅读文档中关于tht主题的更多信息:

延迟初始化的属性

通常,声明为具有非null类型的属性必须是 在构造函数中初始化。然而,通常情况下并非如此 方便。例如,可以通过以下方式初始化属性: 依赖注入,或在单元测试的设置方法中。在这个 在这种情况下,您不能在构造函数中提供非null初始值设定项,但 在引用属性时,仍然希望避免空检查 在类的主体内部


Spring项目的官方建议是使用构造函数注入。 在科特林,它看起来像这样:

@Service
class GobblinMetricsConsumer(
    private val graphiteClient: GraphiteClient,
    private val parserService: JsonParserService,
    private val kafkaConfigurationProperties: KafkaConfigurationProperties
) {
  // code will go here
}

Spring项目的官方建议是使用构造函数注入。 在科特林,它看起来像这样:

@Service
class GobblinMetricsConsumer(
    private val graphiteClient: GraphiteClient,
    private val parserService: JsonParserService,
    private val kafkaConfigurationProperties: KafkaConfigurationProperties
) {
  // code will go here
}