2012-12-16 22 views
14

Tôi đang làm việc trên một dự án Spring dựa đó là (cái nay) hoàn toàn XML-miễn phí, ngoại trừ bây giờ tôi đã đánh một bức tường với mùa xuân JPA kho populator:Làm thế nào để khai báo một bean populator có sử dụng cấu hình java thay vì XML?

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

Làm thế nào sẽ ở trên được thể hiện trong lớp java @Configuration?

bài này gợi ý sử dụng FactoryBean trực tiếp: https://stackoverflow.com/a/13566712/1746274

Tôi cố gắng đó và gần nhất tôi nhận được sau nhưng nó không hoàn toàn đúng.

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

Kết quả ở trên là FactoryBeanNotInitializedException với thông báo JacksonRepositoryPopulatorFactoryBean does not support circular references.

Bất kỳ ý tưởng nào?

Trả lời

23

Đó là thẳng về phía trước thực sự:

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

Bằng cách trả lại FactoryBean chính nó, mùa xuân sẽ chăm sóc gọi tất cả các giao diện necessarry gọi lại (ví dụ: setApplicationContext(…), setBeanClassLoader(…) vv). Đậu của nhà máy là ApplicationListener và do đó sẽ nghe số ContextRefreshedEvent và kích hoạt quần thể khi số ApplicationContext được khởi tạo hoàn toàn.

+1

Cảm ơn bạn, Oliver! Đó chính xác là những gì tôi đang tìm kiếm. – MrJohnBBQ

+5

Với spring-data-commons - 1.12.3.RELEASE tên lớp là 'Jackson2RepositoryPopulatorFactoryBean'. – Dr4gon

Các vấn đề liên quan