2010-01-08 9 views
11

दोनों का इस्तेमाल बीन उदाहरण प्राप्त करने के लिए किया जा सकता है, लेकिन इसे लागू करने के लिए कौन सा बेहतर उपयोग किया जा सकता है?वसंत बीनफैक्टरीएवेयर और एप्लिकेशनकॉन्टेक्स्टवेयर के बीच क्या अंतर है?

उत्तर

28

यदि आपको BeanFactory के संदर्भ की आवश्यकता है, तो BeanFactoryAware का उपयोग करें। यदि आपको ApplicationContext के संदर्भ की आवश्यकता है, तो ApplicationContextAware का उपयोग करें।

ध्यान दें कि ApplicationContext इंटरफ़ेस BeanFactory का उप-वर्ग है, और मूल BeanFactory इंटरफ़ेस के शीर्ष पर अतिरिक्त विधियां प्रदान करता है।

यदि आपको केवल getBean() पर कॉल करने की आवश्यकता है, तो BeanFactory पर्याप्त है।

ध्यान दें कि स्प्रिंग 2.5+ BeanFactory या ApplicationContext के साथ स्वयं को तारित करने का एक अच्छा तरीका प्रदान करता है, उदा।

private @Autowired ApplicationContext appContext; 
private @Autowired BeanFactory beanFactory; 

XyzAware इंटरफेस की कोई आवश्यकता नहीं है।

+0

स्वचालित रूप से ऐपकॉन्टेक्स्ट/बीन फैक्ट्री सेट इवेंट को पकड़ना संभव है? कन्स्ट्रक्टर appContext/beanFactory में अभी तक सेट नहीं किया गया है ... – ksimon

2

क्या आपको एप्लिकेशन कॉन्टेक्स्ट पर उपलब्ध अतिरिक्त सुविधाओं तक पहुंच की आवश्यकता है? यदि ऐसा है, तो आपको निश्चित रूप से एप्लिकेशनकॉन्टेक्स्टवेयर का उपयोग करना चाहिए। यदि नहीं, बीनफ़ैक्टरीएवेयर पर्याप्त होगा।

कई अन्य चीजों के अलावा, एप्लिकेशन कॉन्टेक्स्ट में बीन्स का निरीक्षण करने के लिए अतिरिक्त विधियां हैं। containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForType, getBeansOfType है कि आप के लिए उपयोगी हो सकता है और जो पर उपलब्ध नहीं हैं BeanFactory

मैं आमतौर पर ApplicationContextAware

4

लागू एक ApplicationContext है BeanFactory का एक विस्तारित संस्करण और इसलिए अतिरिक्त कार्यक्षमता प्रदान करता है।

तो ApplicationContextAware या BeanFactoryAware का उपयोग करने के लिए सवाल उठता है: क्या आपको स्पष्ट रूप से अतिरिक्त ApplicationContext कार्यक्षमताओं की आवश्यकता है? यदि आप ApplicationContextAware लागू करते हैं तो अन्यथा BeanFactoryAware पर चिपके रहें।

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