Kotlin:在继承者中使用自动装配类的问题

时间:2019-06-09 06:43:03

标签: spring kotlin

我有一堂课

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

请咨询,怎么做?或者我可以通过其他方式在AbstractMapper中自动装配bean?

1 个答案:

答案 0 :(得分:1)

您需要在子类构造函数中传递所有超类构造函数参数。 @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
}