我有一堂课
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?
答案 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
}