2016-08-31 10 views
11

मैं स्प्रिंग फ्रेमवर्क के बारे में सीख रहा हूं लेकिन मुझे समझ में नहीं आता कि वास्तव में @Configuration एनोटेशन का अर्थ क्या है और किस वर्ग को एनोटेट किया जाना चाहिए। स्प्रिंग बूट डॉक्स में यह कहा जाता है कि एप्लिकेशन क्लास @Configuration कक्षा होना चाहिए।स्प्रिंग बूट एप्लिकेशन क्लास को @ कॉन्फ़िगरेशन एनोटेशन क्यों होना चाहिए?

वसंत बूट जावा-आधारित कॉन्फ़िगरेशन का समर्थन करता है। हालांकि यह XML स्रोत के साथ SpringApplication.run() को कॉल करने के लिए संभव है, हम आमतौर पर अनुशंसा करते हैं कि आपका प्राथमिक स्रोत @ कॉन्फ़िगरेशन क्लास है।

जानने के लिए कोशिश कर रहा है के बारे में @Configuration मुझे लगता है @Configuration के साथ एक कक्षा व्याख्या इंगित करता है कि वर्ग सेम परिभाषाओं का एक स्रोत के रूप में वसंत आईओसी कंटेनर द्वारा इस्तेमाल किया जा सकता है।

यदि ऐसा है तो यह एप्लिकेशन क्लास बीन परिभाषाओं का स्रोत कैसे है?

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan 
public class App 
{ 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(App.class, args);  
    } 
} 

मैं काफी वसंत के बारे में अधिकांश अन्य बुनियादी अवधारणाओं को समझ लिया है, लेकिन मैं @Configuration के प्रयोजन के समझ में नहीं कर सकते हैं या जो कक्षाओं @Configuration कक्षाएं होना चाहिए? क्या कोई मदद कर सकता है। धन्यवाद !!

उत्तर

18

आप इसे सही समझ गए।

@Configuration

@Configuration xml फ़ाइल के लिए एक एनालॉग है। @Bean एनोटेशन के साथ विधियों को परिभाषित करके इस तरह के वर्ग बीन परिभाषाओं के स्रोत हैं।

@Configuration है:

  • की आवश्यकता नहीं है, अगर आप पहले से ही sources पैरामीटर जब SpringApplication.run() विधि बुला में एनोटेट वर्ग पारित;
  • आवश्यक, जब आप एनोटेटेड क्लास को स्पष्ट रूप से पास नहीं करते हैं, लेकिन यह आपके मुख्य कॉन्फ़िगरेशन क्लास के @ComponentScan एनोटेशन में निर्दिष्ट पैकेज में है।

पठनीयता के लिए, वर्गों है कि स्पष्ट रूप से sources के रूप में पारित कर रहे हैं वैसे भी @Configuration साथ एनोटेट किया जा सकता है - बस और अधिक स्पष्ट रूप इरादों को दिखाने के लिए।

आपकी वर्तमान कक्षा वास्तव में बीन परिभाषाओं का स्रोत नहीं है, क्योंकि इसमें कोई नहीं है, लेकिन यदि आपके पास @Bean एनोटेटेड विधियां थीं, तो वसंत उन्हें देखेगा।

@EnableAutoConfiguratiom

साथ या @Configuration बिना इस्तेमाल किया जा सकता। यह स्प्रिंग को क्लासपाथ में आपके द्वारा किए गए कुछ बुनियादी ढांचे को स्थापित करने के लिए कहता है। यह एक तथाकथित आयात वर्ग का आह्वान करके किया जाता है जो @Import एनोटेशन के मान से लिया गया है जो @EnableAutoConfiguration शामिल है। @EnableAutoConfiguration के साथ केवल एक वर्ग को एनोटेट किया जाना चाहिए, डुप्लिकेट करना यह कुछ भी नहीं करता है।

यह जवाब भी वसंत बूट आरंभीकरण प्रक्रिया को समझने में सहायक हो सकता है: Which piece of code in Spring Boot actually registers dispatcher servlet for SpringMVC?

+0

त्वरित और स्पष्ट उत्तर के लिए धन्यवाद। यह अब बहुत समझ में आता है। तो इस मामले में यह एनोटेशन वैकल्पिक है? असल में मैं इस एनोटेशन को स्प्रिंग सिक्योरिटी जैसे थोड़ा अधिक उपयोग करने वाला देखता हूं, सुरक्षा कॉन्फिग क्लास को @ कॉन्फ़िगरेशन के साथ भी एनोटेट किया गया है, भले ही इसमें कोई बीन्स नहीं है http://docs.spring.io/spring-security/site/ दस्तावेज़/3.2.x/गाइड/helloworld.html – varunkr

+1

आप सही हैं। यह वैकल्पिक है, जब तक कि आप इसे स्वत: स्कैन नहीं करना चाहते (मेरा अद्यतन उत्तर देखें)। सुरक्षा कॉन्फिग के साथ यही मामला है - उन्होंने इसे स्कैन किए जाने पर ही इसे एनोटेट किया था। –

+0

@ArtemNovikov जब आप अपना आवेदन पूर्ण वसंत बूट एप्लिकेशन होने पर कब और कब विचार करेंगे? – Jesse

6

मुझे लगता है कि मुख्य कारण यह है, क्यों स्प्रिंग बूट के @SpringBootApplication एनोटेशन स्वचालित रूप से लागू होता है @Configuration बहुत ही कक्षा में सेम परिभाषाओं को जोड़ने के लिए अनुमति देने के लिए है। स्प्रिंग बूट के मुख्य लक्ष्यों में से एक यह है कि आप तेजी से आवेदन करें और अतिरिक्त आंदोलनों के बिना। तो आप एप्लिकेशन की कक्षा में बीन परिभाषाओं को सही जोड़ने की अनुमति देकर, आपको अपनी कॉन्फ़िगरेशन को पकड़ने के लिए अतिरिक्त कक्षाएं बनाने की आवश्यकता नहीं है। आपके पास सिर्फ 1 वर्ग है और यही वह है।

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