【发布时间】:2019-08-08 22:12:30
【问题描述】:
我有一个包含从 JSON 文件反序列化的数据的类。这些数据应该在我的应用程序中可用,所以我想将它绑定为 bean。
为了保持反序列化逻辑和数据结构在一起,我想把@Bean注解的工厂方法放到数据类本身——像这样:
@Configuration
public class MyData {
// factory method
@Bean
public static MyData loadMyData(ResourceLoader resourceLoader) throws IOException {
try (InputStream input = resourceLoader.getResource("classpath:data.json").getInputStream()) {
return new ObjectMapper().readValue(input, MyData.class);
}
}
// data structure
private Map<String, DataDetail> details;
// ...
}
但是这失败了,因为@ComponentScan 现在找到了两个 bean 定义:
org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有“org.example.MyData”类型的合格bean可用:预期的单个匹配bean但找到了2:myData,loadMyData
我也试过用@Component替换@Configuration,但结果是一样的。
我只是错过了类上的正确注释,还是无法将 @Bean 方法放在 bean 类本身中?
【问题讨论】:
-
你需要两个相同类型的bean吗?您可以将它们命名为唯一的并
Autowire对应一个 -
不,我只想要一颗豆子。但到目前为止,我还没有弄清楚如何在所描述的场景中得到这个。
标签: spring spring-boot spring-annotations