खोज…


परिचय

इस विषय में मैं स्प्रिंग बूट पैकेज स्कैनिंग का अवलोकन करूंगा।

आप निम्न लिंक ( उपयोग-बूट-संरचना-आपका-कोड ) में स्प्रिंग बूट डॉक्स में कुछ बुनियादी जानकारी पा सकते हैं, लेकिन मैं अधिक विस्तृत जानकारी प्रदान करने का प्रयास करूंगा।

स्प्रिंग बूट, और सामान्य रूप से स्प्रिंग, beans और configuration बनाने के लिए कुछ एनोटेशन के लिए स्वचालित रूप से पैकेज स्कैन करने की सुविधा प्रदान करते हैं।

पैरामीटर

टिप्पणी विवरण
@SpringBootApplication मुख्य वसंत बूट आवेदन एनोटेशन। अनुप्रयोग में एक समय का उपयोग किया जाता है, जिसमें एक मुख्य विधि होती है, और पैकेज स्कैनिंग के लिए मुख्य पैकेज के रूप में कार्य करता है
@SpringBootConfiguration इंगित करता है कि एक वर्ग स्प्रिंग बूट एप्लिकेशन प्रदान करता है। आवेदन में केवल एक बार घोषित किया जाना चाहिए, आमतौर पर @SpringBootApplication सेट @SpringBootApplication
@EnableAutoConfiguration स्प्रिंग एप्लिकेशन संदर्भ के ऑटो-कॉन्फ़िगरेशन को सक्षम करें। आवेदन में केवल एक बार घोषित किया जाना चाहिए, आमतौर पर @SpringBootApplication सेट @SpringBootApplication
@ComponentScan एक निश्चित पैकेज और उसके बच्चों पर स्वचालित पैकेज स्कैनिंग को ट्रिगर करने या कस्टम पैकेज स्कैनिंग सेट करने के लिए उपयोग किया जाता है
@Configuration एक या एक से अधिक @Bean तरीकों को घोषित करने के लिए उपयोग किया जाता है। पारंपरिक xml कॉन्फ़िगरेशन के बजाय एक या एक से अधिक @Bean तरीकों को घोषित करने के लिए ऑटो पैकेज स्कैनिंग द्वारा उठाया जा सकता है
@सेम इंगित करता है कि एक विधि स्प्रिंग कंटेनर द्वारा प्रबंधित होने के लिए बीन का उत्पादन करती है। आमतौर पर @Bean एनोटेट किए गए तरीकों को @Configuration एनोटेट वर्गों में रखा जाएगा जो जावा कॉन्फ़िगरेशन आधारित बीन्स बनाने के लिए पैकेज स्कैनिंग द्वारा उठाए जाएंगे।
@Component क्लास को @Component घोषित करके यह एनोटेशन-आधारित कॉन्फ़िगरेशन और क्लासपैथ स्कैनिंग का उपयोग करते समय ऑटो-डिटेक्शन के लिए एक उम्मीदवार बन जाता है। आमतौर पर @Component साथ एनोटेट किया गया एक वर्ग आवेदन में bean बन जाएगा
@Repository मूल रूप से डोमेन-ड्रिवेन डिज़ाइन (इवांस, 2003) द्वारा परिभाषित किया गया है "इनकैप्सुलेटिंग स्टोरेज के लिए एक तंत्र। यह आमतौर पर spring data लिए Repository को इंगित करने के लिए उपयोग किया जाता है।
@सेवा @Component में अभ्यास के समान। मूल रूप से डोमेन-ड्रिवेन डिज़ाइन (इवांस, 2003) द्वारा परिभाषित किया गया "एक ऑपरेशन के रूप में पेश किया गया जो एक इंटरफ़ेस के रूप में पेश किया गया है जो बिना किसी अव्यवस्थित राज्य के साथ मॉडल में अकेला खड़ा है।"
@Controller इंगित करता है कि एक एनोटेट वर्ग एक "नियंत्रक" (जैसे एक वेब नियंत्रक) है।
@RestController एक सुविधा एनोटेशन ही है कि के साथ एनोटेट @Controller और @ResponseBody । डिफ़ॉल्ट रूप से स्वचालित रूप से उठाया जाएगा क्योंकि इसमें @Controller एनोटेशन है जो डिफ़ॉल्ट रूप से चुना गया है।

@SpringBootApplication

अच्छे स्वचालित पैकेज स्कैनिंग के लिए स्प्रिंग बूट का उपयोग करके अपने कोड को संरचना करने का सबसे बुनियादी तरीका @SpringBootApplication एनोटेशन का उपयोग @SpringBootApplication । यह एनोटेशन अपने आप में 3 अन्य एनोटेशन प्रदान करता है जो स्वचालित स्कैनिंग में मदद करता है: @SpringBootConfiguration , @EnableAutoConfiguration , @ComponentScan ( Parameters सेक्शन में प्रत्येक एनोटेशन के बारे में अधिक जानकारी)।

@SpringBootApplication को @SpringBootApplication से मुख्य पैकेज में रखा जाएगा और अन्य सभी घटकों को इस फ़ाइल के तहत संकुल में रखा जाएगा:

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

जब तक अन्यथा उल्लेख किया है, वसंत बूट का पता लगाता है @Configuration , @Component , @Repository , @Service , @Controller , @RestController एनोटेशन स्कैन किया संकुल के तहत स्वचालित रूप से ( @Configuration और @RestController उठाया जा रहा है, क्योंकि वे द्वारा एनोटेट @Component और @Controller तदनुसार )।

मूल कोड उदाहरण:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}

संकुल / कक्षाएं स्पष्ट रूप से सेट करना

संस्करण 1.3 के बाद से आप भी सेट करके स्कैन विशिष्ट संकुल के लिए वसंत बूट बता सकते हैं scanBasePackages या scanBasePackageClasses में @SpringBootApplication के बजाय निर्दिष्ट करने @ComponentScan

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - स्कैन करने के लिए बेस पैकेज के रूप में com.example.myproject सेट करें।
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - के प्रकार के लिए सुरक्षित विकल्प scanBasePackages के पैकेज सेट CustomerController.java , com.example.myproject.web , के रूप में आधार पैकेज स्कैन करने के लिए।

ऑटो-कॉन्फ़िगरेशन को छोड़कर

एक और महत्वपूर्ण विशेषता विशिष्ट ऑटो विन्यास का उपयोग कर वर्गों को बाहर करने की क्षमता है exclude या excludeName ( excludeName संस्करण 1.3 के बाद से मौजूद हैं)।

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - ऑटो पैकेज स्कैनिंग से DemoConfiguration को बाहर कर DemoConfiguration
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - पूरी तरह से वर्गीकृत नाम का उपयोग करके वही करेगा।

@ComponentScan

अधिक जटिल पैकेज स्कैनिंग को कॉन्फ़िगर करने के लिए आप @ComponentScan का उपयोग कर सकते हैं। @ComponentScans भी एक कंटेनर एनोटेशन के रूप में कार्य करता है जो कई @ComponentScan एनोटेशन एकत्र करता है।

मूल कोड उदाहरण

@ComponentScan
public class DemoAutoConfiguration {
}

@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}

@ComponentScan जैसी कोई कॉन्फ़िगरेशन क्रियाओं के साथ @SpringBootApplication और इस एनोटेशन के साथ एनोटेट वर्ग के तहत सभी पैकेज स्कैन करना।

इस उदाहरण में मैं @ComponentScan कुछ उपयोगी गुणों के बारे में @ComponentScan :

  1. basePackages - स्कैन करने के लिए विशिष्ट पैकेजों को बताने के लिए उपयोग किया जा सकता है।
  2. useDefaultFilters - झूठे को यह विशेषता (चूक सही) की स्थापना क्या आप वाकई वसंत नहीं स्कैन करता है बना सकते हैं द्वारा @Component , @Repository , @Service , या @Controller स्वचालित रूप से।
  3. includeFilters - पैकेज स्कैनिंग में शामिल करने के लिए विशिष्ट वसंत एनोटेशन / regex पैटर्न शामिल करने के लिए इस्तेमाल किया जा सकता।
  4. excludeFilters - विशिष्ट वसंत एनोटेशन / regex पैटर्न बाहर करने के लिए पैकेज स्कैनिंग में शामिल करने के लिए इस्तेमाल किया जा सकता।

कई और विशेषताएं हैं लेकिन पैकेज स्कैनिंग को अनुकूलित करने के लिए उन का सबसे अधिक उपयोग किया जाता है।

अपना स्वयं का ऑटो-कॉन्फ़िगरेशन बनाना

स्प्रिंग बूट बहुत सारे पूर्व-निर्मित ऑटो-कॉन्फ़िगरेशन पैरेंट प्रोजेक्ट्स पर आधारित है। आपको पहले से ही स्प्रिंग बूट स्टार्टर प्रोजेक्ट्स से परिचित होना चाहिए।

आप निम्न आसान चरणों को अपनाकर अपनी स्टार्टर परियोजना आसानी से बना सकते हैं:

  1. डिफ़ॉल्ट बीन्स को परिभाषित करने के लिए कुछ @Configuration कक्षाएं बनाएं। आपको अनुकूलन की अनुमति देने के लिए बाहरी गुणों का यथासंभव उपयोग करना चाहिए और ऑटो-कॉन्फ़िगरेशन हेल्पर एनोटेशन जैसे @AutoConfigureBefore , @AutoConfigureAfter , @ConditionalOnBean , @ConditionalOnMissingBean आदि का उपयोग करने की कोशिश करनी @ConditionalOnMissingBean । आप आधिकारिक प्रलेखन स्थिति एनोटेशन में प्रत्येक एनोटेशन पर अधिक विस्तृत जानकारी पा सकते हैं।
  2. एक स्वत: कॉन्फ़िगरेशन फ़ाइल / फ़ाइलें रखें जो सभी @Configuration कक्षाओं को एकत्रित करता है।
  3. spring.factories नाम की एक फ़ाइल बनाएं और इसे src/main/resources/META-INF
  4. में spring.factories , सेट org.springframework.boot.autoconfigure.EnableAutoConfiguration अल्पविराम के साथ संपत्ति अलग अपने के मूल्यों @Configuration कक्षाएं:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

इस पद्धति का उपयोग करके आप अपने स्वयं के ऑटो-कॉन्फ़िगरेशन कक्षाएं बना सकते हैं जिन्हें स्प्रिंग-बूट द्वारा चुना जाएगा। स्प्रिंग-बूट स्वचालित रूप से स्प्रिंग के लिए सभी spring.factories / spring.factories निर्भरताओं को spring.factories करता है। यदि यह एक मिल जाए, तो यह ऑटो-कॉन्फ़िगरेशन प्रक्रिया में निर्दिष्ट सभी @Configuration कक्षाएं जोड़ता है।

सुनिश्चित करें कि आपके auto-configuration स्टार्टर प्रोजेक्ट में spring boot maven plugin क्योंकि यह परियोजना को एक निष्पादन योग्य JAR के रूप में पैकेज करेगा और spring.factories द्वारा लोड नहीं किया जाएगा जैसा कि इरादा है - वसंत बूट आपके spring.factories को खोजने में सक्षम नहीं होगा। आपके कॉन्फ़िगरेशन को लोड नहीं करेगा



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow