Как объявить почтовый сервер репозитория 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
.
Любые идеи?
Ответы
Ответ 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
полностью инициализируется.