Spring在Kotlin中注入了参考
在Kotlin中,一个变量必须在声明时初始化,除非它有?
附加到类型名称。 所以Spring的注入bean必须被声明为:
@AutoWired var someService: SomeService? = null
令人讨厌的是,从这里到处都有someService
被使用,那么必须指定某种空安全逻辑,或者是直接的空检查。
当然我们可以这样做:
@AutoWired var someService = new SomeService()
但是这并不总是可能的,一次性的实例只是混淆。
我的问题是,无论如何告诉Kotlin这个变量将被初始化,实际上不是null
?
你有两个选择。
1)使用构造函数注入
在我看来,构造器注入是最好的方式,因为它明确声明必须设置依赖关系来构造对象。
2)宣布你的领域为lateinit
阅读文档中有关主题的更多信息: https : //kotlinlang.org/docs/reference/properties.html
后期初始化属性
通常,声明为具有非null类型的属性必须在构造函数中初始化。 但是,这往往不方便。 例如,属性可以通过依赖注入来初始化,或者在单元测试的设置方法中进行初始化。 在这种情况下,你不能在构造函数中提供一个非null初始值设定项,但是当你引用一个类的内部属性的时候,你还是要避免使用null检查。
public class MyTest { lateinit var subject: TestSubject @SetUp fun setup() { subject = TestSubject() } @Test fun test() { subject.method() // dereference directly } }
Spring项目的官方建议是使用构造函数注入。 在Kotlin里它看起来像这样:
@Service class GobblinMetricsConsumer( private val graphiteClient: GraphiteClient, private val parserService: JsonParserService, private val kafkaConfigurationProperties: KafkaConfigurationProperties ) { // code will go here }
- Angular:如何在表单提交中发布文件到服务器
- Mybatis将COALESCE(int,0)映射到java.lang.Long
- 使用Spring创建Scheduler Bean时发生NullPointerException
- ReactiveCrudRespository永远不会从SaveAll返回
- 如何让黄瓜让Spring注入一步定义类?
- 异常处理程序不能使用`spring-boot-starter-data-rest`
- Spring WebFlux:Reactive MongoDB
- Java vs Kotlin – 同一个类中的Spring @Async方法
- Spring数据Elasticsearch与Kotlin数据类的脚本字段导致Jackson序列化问题