जब मेरा 'सामान्य' बीन बन जाता है तो मुझे गतिशील रूप से बनाई गई बीन जोड़ने की आवश्यकता होती है। मैंने अब तक यह कोशिश की:
//generate a health bean dynamically, and register it
@PostConstruct
public void init(){
solrhealth = new SolrHealthIndicator(solr);
//context.??
}
मैं प्रोग्राम के रूप में एक SolrHealthIndicatior बीन का निर्माण करता हूं, क्योंकि मैं स्प्रिंग सोलर डेटा का उपयोग नहीं कर रहा हूं। अब मैं इसे पंजीकृत कराना चाहता हूं ताकि यह /स्वास्थ्य में दिखाई दे।
मेरे पास मेरा संदर्भ वायर्ड है, लेकिन वहां नव निर्मित बीन को पंजीकृत करने का तरीका नहीं मिल रहा है ...
3 जवाब
आप @Configuration
वर्ग के भीतर @Bean
एनोटेशन का उपयोग करके अपने बीन को प्रोग्रामिक रूप से परिभाषित करने में सक्षम होना चाहिए।
@Bean
public SolrHealthIndicator solrHealthIndicatior() {
//you can construct the object however you want
return new SolrHealthIndicator();
}
फिर आप इसे किसी भी अन्य बीन (@Autowired
कंस्ट्रक्टर, फील्ड, सेटर इंजेक्शन, आदि) की तरह इंजेक्ट कर सकते हैं, यदि एक ही प्रकार के कई बीन्स हैं तो आप उनके बीच अंतर करने के लिए @Qualifier
का उपयोग कर सकते हैं।
आपको @Lookup
एनोटेशन का उपयोग करने की आवश्यकता है।
@Component
public class SolrHealthIndicator {
public SolrHealthIndicator(Solr solr) {
}
}
public class BeanInQuestion {
@PostConstruct
public void init() {
solrHealthIndicator = getHealthIndicatorBean();
}
@Lookup
public SolrHealthIndicator getHealthIndicatorBean() {
//Spring creates a runtime implementation for this method
return null;
}
}
आप अपने @PostConstruct
वाले वर्ग को BeanDefinitionRegistryPostProcessor
. तब आप अपने बीन्स को प्रोग्रामेटिक रूप से पंजीकृत करने में सक्षम होंगे:
@Bean
public class MyBean implements BeanDefinitionRegistryPostProcessor {
private BeanDefinitionRegistry registry;
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
this.registry = registry;
}
@PostConstruct
public void init(){
registry.registerBeanDefinition("solrHealthIndicator", new SolrHealthIndicator(solr));
}
}
संबंधित सवाल
नए सवाल
spring
स्प्रिंग फ्रेमवर्क जावा प्लेटफॉर्म पर एप्लिकेशन डेवलपमेंट के लिए एक ओपन सोर्स फ्रेमवर्क है। इसके मूल में घटक आधारित आर्किटेक्चर के लिए समृद्ध समर्थन है, और इसमें वर्तमान में बीस से अधिक उच्च एकीकृत मॉड्यूल हैं।