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