Kotlin с Spring DI: свойство lateinit не было инициализировано

Я не получаю инъекцию зависимостей зависимостей Spring-based setter в Kotlin, чтобы работать, поскольку она всегда заканчивается сообщением об ошибке «свойство lateinit api не было инициализировано». Я мог бы свести проблему к следующему сценарию: есть интерфейс

interface IApi { fun retrieveContent(): String } 

который реализуется

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

Я хочу использовать реализацию в другом классе, где предполагается инъекция зависимостей:

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

Однако приложение завершается вышеупомянутым сообщением об ошибке. Конфигурация моей Spring выглядит следующим образом:

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

В основной функции я загружаю контекст приложения и вызываю метод:

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

В чем проблема?

Весна не задействована, если вы просто так называете конструктор. То же, что и в Java,

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

Spring Framework 5.0 добавляет расширения Kotlin , поэтому вы также можете написать либо один из

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

@Autowired обычно добавляется к @Autowired свойства. Поэтому вместо того, чтобы использовать его для свойства, вы должны явно аннотировать установщик:

 @set:Autowired lateinit var api: IApi 
Intereting Posts
Android studio конвертирует в Kotlin: используйте @JvmStatic в некоторых случаях Ошибка «не должна быть пустой» в Kotlin admob banner использует слишком много памяти Разница между типами List и Array в Котлине Можно ли создать полноценное веб-приложение Node.js с помощью Kotlin? ButterKnife @ Необязательная аннотация, не работающая в фрагменте Котлина Игнорирование определенных свойств при генерации equals (), hashCode () и т. Д. Ошибка компиляции в Eclipse в проекте Kotlin + Java, но проект строится с Maven Как я могу получить ссылку на Kotlin KClass по имени, когда не работает на JVM? Kotlin и идиоматический способ писать, «если не null, else …», основанный на изменяемой ценности Firebase Firestore toObject () с Котлином Как разрешить неоднозначность перегрузки в ссылках на методы? Kotlin: Обновление элемента неизменяемого списка содержание в параметре основного развлечения в котлине Перейдите к следующему действию в android Kotlin; Неразрешенная ссылка на класс