2012-12-16 12 views
14

Pracuję nad projektem wiosennej na którym są (narazie) XML całkowicie wolne, z wyjątkiem teraz mam uderzyć w mur ze sprężyną JPA repozytorium populator:Jak zadeklarować komponent bean popludora za pomocą konfiguracji Java zamiast XML?

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

Jak wyżej być wyrażona w klasie java @Configuration?

Ten post sugeruje, używając FactoryBean bezpośrednio: https://stackoverflow.com/a/13566712/1746274

Próbowałem tego i najbliższy Dostałem następujące ale to nie jest całkiem w porządku.

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

Powyższe skutkuje FactoryBeanNotInitializedException z komunikatem JacksonRepositoryPopulatorFactoryBean does not support circular references.

Wszelkie pomysły?

Odpowiedz

23

To prosta rzeczywiście:

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

odsyłając FactoryBean się, Wiosna zajmie powołując wszystkie interfejsy necessarry zwrotnych (tj setApplicationContext(…), setBeanClassLoader(…) itd.). Ziarna fabryczne to ApplicationListener, a zatem będą nasłuchiwać ContextRefreshedEvent i wywoływać populację, gdy ApplicationContext zostanie w pełni zainicjalizowany.

+1

Dziękuję, Oliver! Właśnie tego szukałem. – MrJohnBBQ

+5

Ze źródłami danych-commons - 1.12.3.RELEASE nazwa klasy to 'Jackson2RepositoryPopulatorFactoryBean'. – Dr4gon

Powiązane problemy