У меня есть класс, который должен содержать данные, которые десериализованы из файла JSON. Эти данные должны быть доступны в моем приложении, поэтому я хочу связать их как бин.
Чтобы сохранить логику десериализации и структуру данных вместе, я хотел поместить аннотированный фабричный метод @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
теперь находит два определения бина:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: нет доступного квалифицирующего компонента типа 'org.example.MyData': ожидается один соответствующий компонент, но найдено 2: myData, loadMyData
Я также пытался заменить @Configuration
на @Component
, но результат тот же.
Я просто пропускаю правильную аннотацию для класса или просто невозможно разместить метод @Bean
в самом классе бинов?