gpt4 book ai didi

java - Spring Boot @ConditionalOnMissingBean 和泛型类型

转载 作者:行者123 更新时间:2023-12-03 20:18:17 25 4
gpt4 key购买 nike

有没有办法让这两个 bean 实例化:

@Bean
@ConditionalOnMissingBean
public Container<Book> bookContainer() {
return new Container<>(new Book());
}

@Bean
@ConditionalOnMissingBean
public Container<Computer> computerContainer() {
return new Container<>(new Computer());
}
@ConditionalOnMissingBean只考虑bean类,错误地制作 bookContainercomputerContainer相同的类型,因此只有其中一个被注册。

我可以给每个明确的限定符,但由于这是 Spring Boot Starter 的一部分,使用起来会很烦人,因为然后用户将被迫以某种方式知道要覆盖的确切名称,而不仅仅是类型。

潜在途径:

由于可以通过其完整的泛型类型向 Spring 请求 bean,因此我可能能够实现一个条件工厂,它将尝试获取一个完整类型的实例并在它不存在时生成一个。我现在正在调查是否/如何做到这一点。
令人惊讶的是,在实现自定义条件时(与 @Conditional 一起使用),它无法访问 bean 类型...

虽然其他所有现代注入(inject)框架都在完整类型上运行,但 Spring 不知何故仍然适用于原始类和字符串名称(!),这让我大吃一惊……有什么解决方法吗?

最佳答案

从 Spring Boot v2.1.0 开始就有可能。

该版本引入了新字段parameterizedContainerConditionalOnMissingBean .

@Bean
@ConditionalOnMissingBean(value = Book.class, parameterizedContainer = Container.class)
public Container<Book> bookContainer() {
return new Container<>(new Book());
}

@Bean
@ConditionalOnMissingBean(value = Computer.class, parameterizedContainer = Container.class)
public Container<Computer> computerContainer() {
return new Container<>(new Computer());
}

关于java - Spring Boot @ConditionalOnMissingBean 和泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com