spring-boot
पैकेज स्कैनिंग
खोज…
परिचय
इस विषय में मैं स्प्रिंग बूट पैकेज स्कैनिंग का अवलोकन करूंगा।
आप निम्न लिंक ( उपयोग-बूट-संरचना-आपका-कोड ) में स्प्रिंग बूट डॉक्स में कुछ बुनियादी जानकारी पा सकते हैं, लेकिन मैं अधिक विस्तृत जानकारी प्रदान करने का प्रयास करूंगा।
स्प्रिंग बूट, और सामान्य रूप से स्प्रिंग, 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
।
-
@SpringBootApplication(scanBasePackages = "com.example.myproject")
- स्कैन करने के लिए बेस पैकेज के रूप मेंcom.example.myproject
सेट करें। -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)
- के प्रकार के लिए सुरक्षित विकल्पscanBasePackages
के पैकेज सेटCustomerController.java
,com.example.myproject.web
, के रूप में आधार पैकेज स्कैन करने के लिए।
ऑटो-कॉन्फ़िगरेशन को छोड़कर
एक और महत्वपूर्ण विशेषता विशिष्ट ऑटो विन्यास का उपयोग कर वर्गों को बाहर करने की क्षमता है exclude
या excludeName
( excludeName
संस्करण 1.3 के बाद से मौजूद हैं)।
-
@SpringBootApplication(exclude = DemoConfiguration.class)
- ऑटो पैकेज स्कैनिंग सेDemoConfiguration
को बाहर करDemoConfiguration
। -
@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
:
- basePackages - स्कैन करने के लिए विशिष्ट पैकेजों को बताने के लिए उपयोग किया जा सकता है।
- useDefaultFilters - झूठे को यह विशेषता (चूक सही) की स्थापना क्या आप वाकई वसंत नहीं स्कैन करता है बना सकते हैं द्वारा
@Component
,@Repository
,@Service
, या@Controller
स्वचालित रूप से। - includeFilters - पैकेज स्कैनिंग में शामिल करने के लिए विशिष्ट वसंत एनोटेशन / regex पैटर्न शामिल करने के लिए इस्तेमाल किया जा सकता।
- excludeFilters - विशिष्ट वसंत एनोटेशन / regex पैटर्न बाहर करने के लिए पैकेज स्कैनिंग में शामिल करने के लिए इस्तेमाल किया जा सकता।
कई और विशेषताएं हैं लेकिन पैकेज स्कैनिंग को अनुकूलित करने के लिए उन का सबसे अधिक उपयोग किया जाता है।
अपना स्वयं का ऑटो-कॉन्फ़िगरेशन बनाना
स्प्रिंग बूट बहुत सारे पूर्व-निर्मित ऑटो-कॉन्फ़िगरेशन पैरेंट प्रोजेक्ट्स पर आधारित है। आपको पहले से ही स्प्रिंग बूट स्टार्टर प्रोजेक्ट्स से परिचित होना चाहिए।
आप निम्न आसान चरणों को अपनाकर अपनी स्टार्टर परियोजना आसानी से बना सकते हैं:
- डिफ़ॉल्ट बीन्स को परिभाषित करने के लिए कुछ
@Configuration
कक्षाएं बनाएं। आपको अनुकूलन की अनुमति देने के लिए बाहरी गुणों का यथासंभव उपयोग करना चाहिए और ऑटो-कॉन्फ़िगरेशन हेल्पर एनोटेशन जैसे@AutoConfigureBefore
,@AutoConfigureAfter
,@ConditionalOnBean
,@ConditionalOnMissingBean
आदि का उपयोग करने की कोशिश करनी@ConditionalOnMissingBean
। आप आधिकारिक प्रलेखन स्थिति एनोटेशन में प्रत्येक एनोटेशन पर अधिक विस्तृत जानकारी पा सकते हैं। - एक स्वत: कॉन्फ़िगरेशन फ़ाइल / फ़ाइलें रखें जो सभी
@Configuration
कक्षाओं को एकत्रित करता है। -
spring.factories
नाम की एक फ़ाइल बनाएं और इसेsrc/main/resources/META-INF
। - में
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
को खोजने में सक्षम नहीं होगा। आपके कॉन्फ़िगरेशन को लोड नहीं करेगा