Intereting Posts
Внедрение исключения Kotlin NullPointer Поведение с функциями высшего порядка Котлина и интерфейсами с одним методом? Имеет ли Kotlin эквивалент Unplicitly Unwrapped Optionals в Swift? Опубликовать библиотеку kotlin (не Android) в jCenter Конструктор Custom View в Android 4.4 сбой на Kotlin, как исправить? Kotlin Ошибки Runtime для базовых операторов Цель камеры не работает: она входит в блок catch и говорит: «Не удалось создать файл!» Как работать с большим количеством в Android Kotlin Apps? Доступ к типам параметров внешнего типа Android-kotlin-binding не обновляет свойства Использование функциональных интерфейсов с функциями функций в Котлине Как я могу определить, является ли число 10 в Котлине или Яве? Расширенное назначение и приращение не поддерживаются для локальных делегированных свойств и встроенных свойств использовать kotlin для springmvc Не удалось создать экземпляр класса данных класса bean Как объявить значение массива в аннотациях Kotlin?

Spring Boot @Autowired с Kotlin в @Service всегда имеет значение null

В настоящее время я пытаюсь переписать приложение загрузки Java Spring Boot с Kotlin. Я столкнулся с проблемой, что во всех моих классах, которые аннотируются с помощью @Service инъекция зависимостей работает некорректно (все экземпляры равны null ). Вот пример:

 @Service @Transactional open class UserServiceController @Autowired constructor(val dsl: DSLContext, val teamService: TeamService) { //dsl and teamService are null in all methods } 

Выполнение этого же в Java работает без проблем:

 @Service @Transactional public class UserServiceController { private DSLContext dsl; private TeamService teamService; @Autowired public UserServiceController(DSLContext dsl, TeamService teamService) { this.dsl = dsl; this.teamService = teamService; } 

Если я комментирую компонент с @Component в Котлине, все работает отлично:

 @Component open class UserServiceController @Autowired constructor(val dsl: DSLContext, val teamService: TeamService) { //dsl and teamService are injected properly } 

Google предоставил много разных подходов для Kotlin и @Autowired которые я пробовал, но все они привели к тому же NullPointerException Я хотел бы знать, какова разница между Kotlin и Java и как я могу это исправить?

Какую версию Spring Boot вы используете? Поскольку 1.4 Spring Boot основан на Spring Framework 4.3, и с тех пор вы должны иметь возможность использовать @Autowired конструктора без какой- @Autowired аннотации @Autowired . Вы пробовали это?

Это будет выглядеть так и работает для меня:

 @Service class UserServiceController(val dsl: DSLContext, val teamService: TeamService) { // your class members } 

Я просто столкнулся с точно такой же проблемой – инъекция работала хорошо, но после добавления аннотации @Transactional все поля с автоопределением равны нулю.

Мой код:

 @Service @Transactional open class MyDAO(val jdbcTemplate: JdbcTemplate) { fun update(sql: String): Int { return jdbcTemplate.update(sql) } } 

Проблема здесь в том, что методы окончательны по умолчанию в Kotlin, поэтому Spring не может создать прокси для класса:

  osaop.framework.CglibAopProxy: Unable to proxy method [public final int org.mycompany.MyDAO.update(... 

«Открытие» метода устраняет проблему:

Фиксированный код:

 @Service @Transactional open class MyDAO(val jdbcTemplate: JdbcTemplate) { open fun update(sql: String): Int { return jdbcTemplate.update(sql) } }