सर्वलेट में <mvc: एनोटेशन-चालित /> और <संदर्भ: एनोटेशन-कॉन्फ़िगरेशन /> के बीच क्या अंतर है?


155

मैं स्प्रिंग 2.5 से स्प्रिंग 3 तक प्रवास कर रहा हूं।

उन्होंने पेश <mvc:annotation-driven />किया है जो कुछ काला जादू करता है। यह सर्वलेट कॉन्फ़िगरेशन फ़ाइल में ही घोषित किए जाने की उम्मीद है।

स्प्रिंग 2.5 में मैंने अभी-अभी उपयोग किया है <context:annotation-config />और <context:component-scan base='...'/>टैग application-context.xmlको स्कैन करने के लिए उपयुक्त बेस पैकेज के साथ दोनों और डिस्पैचर सर्वलेट एक्सएमएल एक्सएमएल घोषित किया है ।

इसलिए मुझे आश्चर्य है कि सर्वलेट कॉन्फिग में mvc:annotation-drivenऔर context:annotation-configटैग्स में क्या अंतर है और मैं स्प्रिंग 3 कॉन्फिग फाइलों में क्या खत्म कर सकता हूं?

जवाबों:


150

<context:annotation-config>जैसे सामान्य एनोटेशन के लिए समर्थन की घोषणा की @Required, @Autowired, @PostConstruct, और इतने पर।

<mvc:annotation-driven />एनोटेशन-संचालित एमवीसी नियंत्रकों के लिए स्पष्ट समर्थन की घोषणा करता है (यानी @RequestMapping, @Controllerहालांकि उन लोगों के लिए समर्थन डिफ़ॉल्ट व्यवहार है), साथ ही @Validसाथ @RequestBody/ के माध्यम से और शरीर के साथ संदेश भेजने के लिए घोषणात्मक सत्यापन के लिए समर्थन जोड़ना ResponseBody


3
क्या मुझे संदर्भ की घोषणा करनी चाहिए: विशेष रूप से अगर मैं घटक-स्कैन टैग में विभिन्न आधार पैकेजों का उपयोग करता हूं, तो एप्लिकेशन-कॉन्टेक्स्ट और सर्वलेट दोनों में एनोटेशन-कॉन्फिग।
glaz666

2
हां, आपको <context:annotation-config>प्रत्येक संदर्भ में आवश्यकता होगी ।
skaffman

61
@skaffman: <mvc:annotation-driven>व्यर्थ नहीं है, यह सिर्फ अनुचित नाम है। वास्तव में यह नए स्प्रिंग एमवीसी फीचर्स जैसे डिक्लेरेटिव @Valid@RequestBody@ResponseBody
वेलिडेशन


7
यह उत्तर स्पष्ट गलत है, क्योंकि mvc: एनोटेशन-चालित रूपांतरण और सत्यापन के लिए महत्वपूर्ण है। यहाँ केवल सही और सार्थक बात @axtavt की टिप्पणी है।
कोनराड गारस

36

वहाँ भी के उपयोग पर कुछ और अधिक विस्तार है <mvc:annotation-driven />में वसंत डॉक्स । संक्षेप में,<mvc:annotation-driven /> आपको स्प्रिंग एमवीसी के आंतरिक कामकाज पर अधिक नियंत्रण प्रदान करता है। जब तक आपको डॉक्स के पूर्वोक्त खंड में उल्लिखित एक या अधिक विशेषताओं की आवश्यकता न हो, तब तक आपको इसका उपयोग करने की आवश्यकता नहीं है।

इसके अलावा, अन्य "एनोटेशन-संचालित" टैग हैं जो अन्य स्प्रिंग मॉड्यूल में अतिरिक्त कार्यक्षमता प्रदान करने के लिए उपलब्ध हैं। उदाहरण के लिए, @ संचार <transaction:annotation-driven />एनोटेशन के उपयोग को सक्षम करता है, <task:annotation-driven />@Scheduled et al के लिए आवश्यक है ...


मैं xml में सेटिंग्स का एक सेट देखना चाहूंगा जो इस टैग के समान है। एक बार जब मैं बहुत पहले उस उदाहरण के साथ आया था, लेकिन यह अधूरा था, AFAIR।
glaz666

7

mvc: एनोटेशन-चालित स्प्रिंग 3.0 में जोड़ा गया एक टैग है जो निम्नलिखित कार्य करता है:

  1. स्प्रिंग 3 प्रकार के रूपांतरण को कॉन्फ़िगर करता है
  2. @NumberFormat के साथ संख्या फ़ील्ड स्वरूपण के लिए समर्थन जोड़ता है
  3. दिनांक, कैलेंडर और Joda Time फ़ील्ड को @DateTimeFormat के साथ जोड़ने के लिए समर्थन जोड़ता है, यदि Joda Time Classpath पर है
  4. अगर JSR-303 प्रदाता वर्गपथ पर है, तो @Valid के साथ @ कंट्रोलर मान्य करने के लिए समर्थन जोड़ता है
  5. XML पढ़ने और लिखने के लिए समर्थन के लिए समर्थन जोड़ता है, अगर JAXB क्लासपाथ पर है (@ RequestBody / @ ResponseBody के साथ HTTP संदेश रूपांतरण)
  6. JSON पढ़ने और लिखने के लिए समर्थन जोड़ता है, अगर जैक्सन क्लासपाथ पर है (# 5 के समान पंक्तियों के साथ)

संदर्भ: एनोटेशन- कॉन्फिगरेशन सेम सेम पर एनोटेशन के लिए दिखता है एक ही एप्लीकेशन के संदर्भ में इसे परिभाषित किया गया है और सभी सामान्य एनोटेशन जैसे @Autowired, @Resource, @Required, @PostConstruct आदि के लिए समर्थन की घोषणा करता है।



तो आपके कहने का मतलब है, अगर मुझे @Autowired, @Resource, @Required, @PostConstruct और @RequestBody, @ResponseBodyइन सभी एनोटेशन की आवश्यकता है तो मुझे इन दोनों mvc:annotation-driven context:annotation-configटैग्स को अपने कॉन्फिगर में जोड़ना होगा ?
आर धवल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.