[英]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.