[英]Spring Boot (Kotlin) Autowire failure for generic bean with List<X>
我在 Batch 应用程序中定义了这个 bean:
@Service("updating-processor")
class UpdatingProcessor(val searchService: searchService, val objectMapper: ObjectMapper) : ItemProcessor<SomeItem, List<OtherObject>>
我知道上面的 bean 是在应用程序中创建的,我在 init 方法中放置了一个断点,当我调试应用程序时它会停止。
我有这门课:
@SpringBootApplication
@EnableBatchProcessing
@EnableJpaRepositories
@EnableRetry(proxyTargetClass=true)
class EtlApplication() : CommandLineRunner {
companion object {
val LOG = LoggerFactory.getLogger(EtlApplication::class.java.name)
}
@Autowired
@Qualifier("updating-processor")
lateinit var updatingProcessor: ItemProcessor<SomeItem, List<OtherObject>>
}
应用程序无法启动
描述:
字段updatedProcessor in ... 需要一个类型为>> 'org.springframework.batch.item.ItemProcessor' 的bean 找不到。
行动:
考虑在您的配置中定义一个 'org.springframework.batch.item.ItemProcessor' 类型的 bean。
我收到一条错误消息,指出无法自动装配“更新处理器”,这是由于List<OtherObject>
作为第二种类型。 如果我将第二个通用参数的List<OtherObject>
更改为OtherObject
,则自动装配工作。
我如何使它与列表一起工作?
这与这篇文章有关 -> spring-inject-list-of-generic-interface-implementations-in-kotlin
您应该能够采取 Spring 建议的操作:
考虑在您的配置中定义一个 'org.springframework.batch.item.ItemProcessor' 类型的 bean。
例如:
@Configuration
class UpdatingProcessorConfig {
@Autowired
lateinit var searchService: SearchService
@Autowired
lateinit var objectMapper: ObjectMapper
@Bean
fun updatingProcessor(): ItemProcessor<SomeItem, List<OtherObject>> = UpdatingProcessor(searchService, objectMapper)
}
class UpdatingProcessor(val searchService: SearchService, val objectMapper: ObjectMapper) :
ItemProcessor<SomeItem, List<OtherObject>> {
override fun process(p0: SomeItem): List<OtherObject>? {
TODO("not implemented")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.