繁体   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