2012-12-16 3 views
14
지금은 봄 JPA 저장소 populator로 벽에 충돌 한 것을 제외하고 내가 (SO-까지) 인 봄 기반 프로젝트 완전히 XML이없는 작업입니다

:XML 대신 java config를 사용하여 리포지토리 populator bean을 선언하는 방법은 무엇입니까?

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

위의 표현이 얼마나 자바 @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(); 
} 

메시지 JacksonRepositoryPopulatorFactoryBean does not support circular referencesFactoryBeanNotInitializedException 위 결과.

아이디어가 있으십니까?

답변

23

실제로 솔직 :

@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 자체를 반환하여, 봄 (즉 setApplicationContext(…), setBeanClassLoader(…) 등) 모든 작업 된 콜백 인터페이스를 호출 처리됩니다. 팩토리 빈은 ApplicationListener이므로 ApplicationContext이 완전히 초기화되면 ContextRefreshedEvent 및 트리거를 수신합니다.

+1

고마워, 올리버! 그게 바로 제가 찾던 것입니다. – MrJohnBBQ

+5

spring-data-commons - 1.12.3.RELEASE 클래스 이름은'Jackson2RepositoryPopulatorFactoryBean'입니다. – Dr4gon