प्लग-इन आर्किटेक्चर के कारण प्रोग्रामेटिक रूप से बीन जोड़ें, मैं अपने वेबैप में प्रोग्रामिंग रूप से एक बीन जोड़ने की कोशिश कर रहा हूं। मेरे पास @Component
एनोटेशन के माध्यम से एक स्प्रिंग बीन बनाया गया है, और मैं ApplicationContextAware
इंटरफ़ेस को कार्यान्वित कर रहा हूं।स्प्रिंग वेब ऐप संदर्भ
मेरे ओवरराइड समारोह इस तरह दिखता है:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
असल में, मैं setApplicationContext को दिया applicationContext वस्तु के लिए एक सेम जोड़ने का तरीका समझ नहीं सकता। क्या कोई मुझे बता सकता है कि मैं इस बारे में गलत तरीके से कैसे जा रहा हूं?
ठीक है, यह है कि क्या मैं समाधान के रूप में के साथ समाप्त हो गया है:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
धन्यवाद। मुझे लगता है कि सबसे कठिन हिस्सा यह जानना है कि क्या देखना है। – user146714
कृपया ध्यान दें कि [जावाडॉक] के अनुसार (http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/beans/factory/config/BeanPostProcessor.html): 'एक बीनफैक्टरीपोस्टप्रोसेसर बीन परिभाषाओं के साथ बातचीत और संशोधित कर सकता है, लेकिन कभी भी बीन उदाहरण नहीं। ऐसा करने से समय से पहले बीन तत्कालता हो सकती है, कंटेनर का उल्लंघन हो सकता है और अनपेक्षित दुष्प्रभाव पैदा हो सकते हैं। यदि बीन इंस्टेंस इंटरैक्शन की आवश्यकता है, तो इसके बजाय बीनपोस्टप्रोसेसर को लागू करने पर विचार करें। ' – dgiffone
' बीनडिफिनिशन रजिस्ट्रीपोस्टप्रोसेसर 'के साथ क्या करना है? मान लीजिए मैंने इस वर्ग को लिखा था। आगे क्या? इसे कैसे सक्रिय करें? – Dims