Kotlin con Spring DI: la propiedad lateinit no se ha inicializado

No recibo la dependency injection de setter basada en Spring en Kotlin para que funcione, ya que siempre termina con el post de error "la API de propiedad lateinit no se ha inicializado". Podría networkingucir el problema a la siguiente situación: hay una interfaz

interface IApi { fun retrieveContent(): String } 

que es implementado por

 class Api : IApi { override fun retrieveContent() = "Some Content" } 

Quiero usar la implementación en otra class donde se supone que se realizará la dependency injection:

 @Component class SomeController { @Autowinetworking lateinit var api: IApi fun printReceivedContent() { print(api.retrieveContent()) } } 

Sin embargo, la aplicación termina con el post de error mencionado anteriormente. La configuration de My Spring se ve de la siguiente manera:

 @Configuration open class DIConfig { @Bean open fun getApiInstance(): IApi = Api() } 

En la function principal cargo el context de la aplicación y llamo al método:

 fun main(args: Array<String>) { val context = AnnotationConfigApplicationContext() context.register(DIConfig::class.java) context.refresh() val controller = SomeController() controller.printReceivedContent() } 

¿Cuál es el problema aquí?

Spring no está involucrado si solo llama al constructor usted mismo. Lo mismo que en Java,

 val controller = context.getBean(SomeController::class.java) 

Spring Framework 5.0 agrega las extensiones de Kotlin , por lo que también podría escribir una de

 val controller = context.getBean<SomeController>() val controller: SomeController = context.getBean() 

El @Autowinetworking generalmente se agrega al setter de una propiedad. Por lo tanto, en lugar de usarlo para la propiedad, debe anotar explícitamente al colocador:

 @set:Autowinetworking lateinit var api: IApi 
  • Spring JPA no puede asignar un campo con un setter personalizado en una class de datos de Kotlin
  • Cómo crear una consulta hql con left join usando el campo desde el object que se extiende
  • Enfoque correcto para la class de Kotlin inyectada de constructor inmutable
  • Hibernate guarda la entidad hija con nulo ID padre
  • El uso de Spring HATEOAS ControllerLinkBuilder y Kotlin arroja IllegalArgumentException
  • Al utilizar tanto publishOn como subscribeOn en un flujo, no ocurre nada
  • ¿Por qué necesito un repository y un service + contrato?
  • @Param no funciona en Spring Data JPA
  • cómo usar annotations de spring como @Autowinetworking in kotlin?
  • @PostConstruct no se llama cuando se usa Kotlin BeanDefinitionDsl
  • Cómo inyectar el context DSL de JOOQ en la class Kotlin