2012-12-16 7 views
14

मैं एक स्प्रिंग आधारित परियोजना है कि है (तो अब तक) पूरी तरह से एक्सएमएल से मुक्त पर काम कर रहा हूँ छोड़कर अब मैं वसंत जेपीए भंडार populator के साथ एक दीवार से टकरा गया है:एक्सएमएल की बजाय जावा कॉन्फ़िगरेशन का उपयोग करके एक शोज़री पॉप्युलेटर बीन घोषित कैसे करें?

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

कैसे ऊपर व्यक्त की जाएगी एक जावा @ कॉन्फ़िगरेशन कक्षा में?

इस पोस्ट में सीधे 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 references के साथ एक FactoryBeanNotInitializedException में ऊपर का परिणाम है।

कोई भी विचार?

उत्तर

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 लौटने अपने आप से, स्प्रिंग सभी necessarry कॉलबैक इंटरफेस लागू की देखभाल होगा (यानी setApplicationContext(…), setBeanClassLoader(…) आदि)। कारखाना बीन ApplicationListener है और इस प्रकार ContextRefreshedEvent को सुनेंगे और ApplicationContext पूरी तरह से प्रारंभ होने पर आबादी को ट्रिगर करेगा।

+1

धन्यवाद, ओलिवर! यही वही है जो मैं ढूंढ रहा था। – MrJohnBBQ

+5

वसंत-डेटा-कॉमन्स के साथ - 1.12.3.RELEASE वर्ग का नाम 'जैक्सन 2 रिपोजिटरीपॉप्यूलेटर फैक्ट्रीबीन' है। – Dr4gon

संबंधित मुद्दे

 संबंधित मुद्दे