복붙노트

[SPRING] XML 대신 java config를 사용하여 저장소 populator bean을 선언하는 방법?

SPRING

XML 대신 java config를 사용하여 저장소 populator bean을 선언하는 방법?

지금까지 Spring JPA 저장소 popupulator를 사용하여 벽을 강타한 것을 제외하고는 (완전히 먼) 완전히 XML이 아닌 Spring 기반 프로젝트에서 작업하고 있습니다.

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

위의 결과는 JacksonRepositoryPopulatorFactoryBean 메시지가 순환 참조를 지원하지 않는 FactoryBeanNotInitializedException을 발생시킵니다.

어떤 아이디어?

해결법

  1. ==============================

    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을 반환함으로써 스프링은 필요한 모든 콜백 인터페이스 (즉, setApplicationContext (...), setBeanClassLoader (...) 등)를 호출하도록 처리합니다. 팩토리 빈은 ApplicationListener이므로 ApplicationContext가 완전히 초기화되면 ContextRefreshedEvent를 수신하고 채우기를 트리거합니다.

  2. from https://stackoverflow.com/questions/13897926/how-to-declare-a-respository-populator-bean-using-java-config-instead-of-xml by cc-by-sa and MIT license