如何在kotlin中使用@Autowired之类的spring注解?

新手上路,请多包涵

是否可以在 Kotlin 中执行以下操作?

 @Autowired
internal var mongoTemplate: MongoTemplate

@Autowired
internal var solrClient: SolrClient

原文由 eendroroy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.1k
2 个回答

在 Spring 中进行依赖注入的推荐方法是构造函数注入:

 @Component
class YourBean(
    private val mongoTemplate: MongoTemplate,
    private val solrClient: SolrClient
) {
  // code
}

在 Spring 4.3 之前,构造函数应显式注释 Autowired

 @Component
class YourBean @Autowired constructor(
    private val mongoTemplate: MongoTemplate,
    private val solrClient: SolrClient
) {
  // code
}

在极少数情况下,您可能喜欢使用字段注入,您可以借助 lateinit 来完成:

 @Component
class YourBean {

    @Autowired
    private lateinit var mongoTemplate: MongoTemplate

    @Autowired
    private lateinit var solrClient: SolrClient
}

构造函数注入在 bean 创建时检查所有依赖项,所有注入的字段都是 val ,另一方面,lateinit 注入的字段只能是 var ,并且运行时开销很小。并使用构造函数测试类,您不需要反射。

链接:

  1. 关于 lateinit 的文档
  2. 关于构造函数的文档
  3. 使用 Kotlin 开发 Spring Boot 应用程序

原文由 Ruslan 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,与 Java 一样,Kotlin 主要支持 Java 注释。一个陷阱是主构造函数上的注释需要显式的“构造函数”关键字:

来自 https://kotlinlang.org/docs/reference/annotations.html

如果需要注解一个类的主构造函数,需要在构造函数声明中加上constructor关键字,并在它之前加上注解:

 class Foo @Inject constructor(dependency: MyDependency) {
  // ...
}

原文由 Mike Buhot 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题