16

我正在开发一个基于 Spring 的项目,该项目(到目前为止)完全无 XML,但现在我已经使用 Spring JPA 存储库填充器碰壁了:

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

以上内容如何在 java @Configuration 类中表达?

这篇文章建议直接使用 FactoryBean: https ://stackoverflow.com/a/13566712/1746274

我试过了,我得到的最接近的是以下,但它不太正确。

@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();
}

上面的结果是FactoryBeanNotInitializedException带有消息JacksonRepositoryPopulatorFactoryBean does not support circular references

有任何想法吗?

4

1 回答 1

24

它实际上是直截了当的:

@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(…)等等)。工厂 bean 是一个ApplicationListener,因此将在完全初始化ContextRefreshedEvent时侦听并触发填充。ApplicationContext

于 2012-12-16T12:47:11.173 回答