Как объявить почтовый сервер репозитория bean с помощью java config вместо XML? - программирование

Как объявить почтовый сервер репозитория bean с помощью java config вместо XML?

Я работаю над проектом Spring, который (до сих пор) полностью без XML, за исключением того, что теперь я ударил стену с помощью почтового агента репозитория Spring JPA:

<repository:jackson-populator location="classpath:data.json" />

Как бы это было выражено в классе java @Configuration?

Этот пост предлагает напрямую использовать FactoryBean: qaru.site/info/375763/...

Я пробовал это, и ближе всего я получил следующее, но это не совсем правильно.

@Bean(name="repositoryPopulator")
public RepositoryPopulator getRespositoryPopulator() throws Exception {
    final JacksonRepositoryPopulatorFactoryBean factory =  new JacksonRepositoryPopulatorFactoryBean();
    factory.getObject().setResourceLocation("classpath:test-data.json");
    factory.afterPropertiesSet();
    return factory.getObject();
}

Вышеприведенный результат: a FactoryBeanNotInitializedException с сообщением JacksonRepositoryPopulatorFactoryBean does not support circular references.

Любые идеи?

4b9b3361

Ответ 1

Это прямолинейно:

@Configuration
class ApplicationConfig {

  @Bean
  public JacksonRepositoryPopulatorFactoryBean repositoryPopulator() {

    Resource sourceData = new ClassPathResource("test-data.json");

    JacksonRepositoryPopulatorFactoryBean factory = new JacksonRepositoryPopulatorFactoryBean();
    // Set a custom ObjectMapper if Jackson customization is needed
    factory.setObjectMapper(…);
    factory.setResources(new Resource[] { sourceData });
    return factory;
  }
}

Вернув сам FactoryBean, Spring позаботится о вызове всех необходимых интерфейсов обратного вызова (т.е. setApplicationContext(…), setBeanClassLoader(…) и т.д.). factory bean является ApplicationListener и, таким образом, будет прослушивать ContextRefreshedEvent и запускать популяцию, когда ApplicationContext полностью инициализируется.