2015-10-22 4 views
5

मैं इस link पर आया जो बताता है कि एक बीन विरासत में कैसे प्राप्त किया जा सकता है। यह मानते हुए कि इस उदाहरण में हैलोवर्ल्ड क्लास को @ कॉम्पोनेंट एनोटेशन का उपयोग करके एक बीन के रूप में उजागर किया गया है, यह बीन विरासत में कैसे एक और बीन बना सकता है? क्या मैं हैलोवर्ल्ड बीन का उत्तराधिकारी बनाने के लिए विस्तार कर सकता हूं और मौजूदा बीन को अतिरिक्त सुविधाओं के साथ एक नए बीन के रूप में उजागर करने के लिए नई कक्षा में @ कॉम्पोनेंट जोड़ सकता हूं?वसंत विरासत - एनोटेशन

उत्तर

5

सबसे पहले आप अपने सार विन्यास, जो @Configuration रूप नहीं यह अंकन द्वारा हासिल की है बनाने के लिए, इस तरह:

// notice there is no annotation here 
public class ParentConfig { 

    @Bean 
    public ParentBean parentBean() { 
     return new ParentBean(); 
    } 

} 

एक तो आप इसके विस्तार, इस तरह:

@Configuration 
public class ChildConfig extends ParentConfig { 

    @Bean 
    public ChildBean childBean() { 
     return new ChildBean(); 
    } 

} 

परिणाम वही होगा जैसा आपने किया था:

@Configuration 
public class FullConfig { 

    @Bean 
    public ParentBean parentBean() { 
     return new ParentBean(); 
    } 

    @Bean 
    public ChildBean childBean() { 
     return new ChildBean(); 
    } 

} 

संपादित: टिप्पणी में अनुवर्ती सवाल का जवाब।

यदि वसंत दोनों कक्षाओं, माता-पिता और बच्चे को उठाता है, तो डुप्लीकेट बीन्स के साथ समस्याएं होंगी, इसलिए आप इसे सीधे तक विस्तारित नहीं कर सकते हैं। यहां तक ​​कि यदि आप विधियों को ओवरराइड करते हैं, तो सुपर-क्लास के सेम भी ParentConfig द्वारा तत्काल हो जाएंगे।

के बाद से अपने माता पिता के वर्ग पहले से ही संकलित किया गया है, तो आप 2 विकल्प हैं:

  1. माता पिता वर्ग के लेखक से बात करें और कृपया उसे इसे बदलने के लिए पूछना।

  2. @ComponentScan पैकेज बदलें।

समाधान 2 पर स्पष्ट करने के लिए:

माता पिता वर्ग पैकेज com.parent.ParentConfig में है और बच्चे के वर्ग पैकेज com.child.ChildConfig है, तो आप घटक स्कैनिंग कॉन्फ़िगर कर सकते हैं ताकिcom.childकेवल कक्षाओं के तहत प्राप्त उठाया।

आप अपनी मुख्य विन्यास फाइल (सोच अनुप्रयोग वर्ग) पर @ComponentScan("com.child") एनोटेशन का उपयोग कर घटक स्कैनिंग पैकेज निर्दिष्ट कर सकते हैं।

+0

धन्यवाद ईसाला। मेरे मामले में, जिस वर्ग को मैं विस्तारित करने का प्रयास कर रहा हूं वह एक जार का हिस्सा है और इसे घटक एनोटेशन परिभाषित किया गया है। मैं एक नया बीन बनाना चाहता हूं जो इसे बढ़ाता है और एक विधि को ओवरराइड करता है। –

+0

@PunterVicky मैंने आपके अनुवर्ती प्रश्न का उत्तर जोड़ा है :) – ESala

+0

धन्यवाद, ईसाला! –

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