如何使用java config而不是XML声明存储库populator bean?
我正在开发一个基于Spring的项目(迄今为止)完全没有XML,除了现在我已经使用Spring JPA存储库populator打了一个墙:
如何在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
。
有任何想法吗?
它实际上是直截了当的:
@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
,因此在ApplicationContext
完全初始化时将监听ContextRefreshedEvent
并触发填充。