簡體   English   中英

Spring Boot (Kotlin) 使用 List 的泛型 bean 自動裝配失敗<X>

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM