2011-03-11 15 views
149

मैं context:component-scan तत्व में spring-servlet.xml फ़ाइल में एकाधिक पैकेज कैसे जोड़ सकता हूं?एकाधिक संकुल: घटक-स्कैन, वसंत विन्यास

मैं

<context:component-scan base-package="z.y.z.service" base-package="x.y.z.controller" /> 

और

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

और

<context:component-scan base-package="x.y.z.service" /> 
<context:component-scan base-package="x.y.z.controller" /> 

कोशिश की, लेकिन त्रुटि मिल गया है:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency: 

उत्तर

217

निम्नलिखित दृष्टिकोण सही है:

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

ध्यान दें कि त्रुटि की शिकायत के बारे में x.y.z.dao.daoservice.LoginDAO, जो

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 
+0

हाँ, ऐसा सोचा (+1) –

+4

यह उत्तर इंगित करता है कि बेस-पैकेज के सदस्यों के लिए रिकर्सन नहीं है लेकिन वहां है: http://stackoverflow.com/questions/7774295/वसंत-एक्सएमएल-फाइल-कॉन्फ़िगरेशन-पदानुक्रम-सहायता-स्पष्टीकरण/7774597 # 7774597। मैं यह स्पष्ट करने के लिए थोड़ा जवाब देने का सुझाव दूंगा। – djangofan

42

यो यू आधार पैकेज के अंदर एकाधिक आधार पैकेज (axtavt's answer देखें) जोड़ सकते हैं, लेकिन आप भी कर सकते हैं filter what's scanned:

<context:component-scan base-package="x.y.z"> 
    <context:include-filter type="regex" expression="(service|controller)\..*"/> 
</context:component-scan> 
+0

तरह सर धन्यवाद, अब यह – Shams

+2

@shams काम कर रहा है साहब मेरे लिए कोई जरूरत नहीं है, लेकिन अगर उत्तर सही है तो आपको इसे स्वीकार करने के रूप में चिह्नित करना चाहिए (चेकमार्क पर क्लिक करें) –

+1

आप एकाधिक बेस पैकेज क्यों नहीं जोड़ सकते हैं? उदाहरण के लिए "org.example, com.example" की तरह? –

16
<context:component-scan base-package="x.y.z"/> 
: संकुल में ऊपर उल्लेख नहीं किया, शायद आप इसे जोड़ने के लिए भूल गया

काम करेगा क्योंकि शेष पैकेज "x.y.z" के उप-पैकेज हैं। इस प्रकार, आपको व्यक्तिगत रूप से प्रत्येक पैकेज का उल्लेख करने की आवश्यकता नहीं है।

+0

मुझे लगता है कि यह सच नहीं है ... – elcadro

+25

@elcadro आपको गलत लगा – NimChimpsky

+2

ठीक है!शायद यह एक और कारण था, लेकिन यह सिर्फ मेरे लिए पोर्टल के लिए वसंत एमवीसी के साथ काम नहीं करता ... – elcadro

31

एनोटेशन दृष्टिकोण

@ComponentScan({ "x.y.z", "x.y.z.dao" }) 
+0

क्या हमें अनिवार्य रूप से विशिष्ट पैकेज जोड़ने की आवश्यकता है या यदि हम केवल शीर्ष स्तर के पैकेज को परिभाषित करते हैं तो यह स्वचालित रूप से उप पैकेज स्कैन कर सकता है? –

+0

@ निखिलसाहू नोप, यह एक रिकर्सिव स्कैन है (स्प्रिंग 3>) –

4

एक और सामान्य एनोटेशन दृष्टिकोण:

@ComponentScan(basePackages = {"x.y.z"}) 
0

तो xyz है आम पैकेज तो आप उपयोग कर सकते हैं:

<context:component-scan base-package="x.y.z.*"> 

यह सब पैकेज शामिल होंगे कि xyz के साथ शुरू होता है जैसे: xyzcontroller, xyzservice आदि

0

के लिए उदाहरण आप पैकेज "com.abc" है और आप इसके अंदर कई संकुल है, आप उपयोग कर सकते हैं

@ComponentScan("com.abc") 
संबंधित मुद्दे