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

标签 spring kotlin

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

@Autowired
internal var mongoTemplate: MongoTemplate

@Autowired
internal var solrClient: SolrClient

最佳答案

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

@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
}

在极少数情况下,您可能喜欢使用字段注入(inject),您可以在 lateinit 的帮助下做到这一点:

@Component
class YourBean {

    @Autowired
    private lateinit var mongoTemplate: MongoTemplate

    @Autowired
    private lateinit var solrClient: SolrClient
}

构造函数注入(inject)在创建bean时检查所有依赖,所有注入(inject)的字段都是val,而lateinit注入(inject)的字段只能是var,运行时开销很小。而用构造函数测试类,你不需要反射。

链接:

  1. Documentation on lateinit
  2. Documentation on constructors
  3. Developing Spring Boot applications with Kotlin

关于spring - 如何在kotlin中使用@Autowired之类的spring注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479631/

相关文章:

java - 我应该使用微服务或映射实体在多个应用程序之间共享数据吗?

java - org.springframework.security.authentication.InternalAuthenticationServiceException

java - 如何使用不同的参数同时启动同一个 spring-batch 作业?

android - 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

android - 为什么 OnResume 会重置我的 SharedPreference 对象中的值?

java - 如何使用@Value Spring Annotation 注入(inject) Map?

gradle - 在 Gradle Kotlin DSL 中注册和创建有什么区别

kotlin - 在 Kotlin 中获取变量的类型

kotlin - 数据类中的默认参数未使用 ktor 序列化程序转换为 json

java - org.hibernate.NonUniqueObjectException。如何修复它?