Kotlin: проблема с использованием класса autowired у наследников - PullRequest
0 голосов

У меня есть класс:

open class AbstractMapper<E : AbstractEntity, D : AbstractDto> @Autowired constructor(

        protected val mapper: ModelMapper

) : EntityDtoMapper<E, D>

В главном конструкторе есть автоматическая привязка bean ModelMapper.Я пытаюсь унаследовать от него другой класс:

class UserParamsMapper : AbstractMapper<UserParams, UserParamsDto>()

IDE попросить объявить поле, автоматически подключенное в class-paernt:

No value passed for parameter ModelMapper

Пожалуйста, совет, как это сделать?Или я могу автоматически подключить bean-компонент в AbstractMapper?

1 Ответ

1 голос
/ 09 июня 2019

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

class UserParamsMapper @Autowired constructor(
    mapper: ModelMapper
) : AbstractMapper<UserParams, UserParamsDto>(mapper)

В качестве альтернативы вы можете перейти к внедрению поля вместо инжектора конструктора в вашем суперклассе.

open class AbstractMapper<E : AbstractEntity, D : AbstractDto> : EntityDtoMapper<E, D> {
    @field:Autowired
    protected lateinit var mapper: ModelMapper
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...