ग्रूवी - एनोटेशन

एनोटेशन मेटाडेटा का एक रूप है जिसमें वे एक प्रोग्राम के बारे में डेटा प्रदान करते हैं जो प्रोग्राम का हिस्सा नहीं है। एनोटेशन का उस कोड के संचालन पर कोई सीधा प्रभाव नहीं पड़ता है जो वे एनोटेट करते हैं।

एनोटेशन का उपयोग मुख्य रूप से निम्नलिखित कारणों से किया जाता है -

  • Information for the compiler - त्रुटियों का पता लगाने या चेतावनी को दबाने के लिए संकलक द्वारा एनोटेशन का उपयोग किया जा सकता है।

  • Compile-time and deployment-time processing - सॉफ्टवेयर टूल कोड, एक्सएमएल फाइलें और इसके आगे उत्पन्न करने के लिए एनोटेशन जानकारी को संसाधित कर सकते हैं।

  • Runtime processing - कुछ एनोटेशन रनटाइम पर जांच के लिए उपलब्ध हैं।

ग्रूवी में, एक मूल एनोटेशन निम्नानुसार है -

@interface - साइन चरित्र पर (@) संकलक को इंगित करता है कि निम्नानुसार एक एनोटेशन है।

एक एनोटेशन सदस्यों को परिभाषित कर सकता है the form निकायों के बिना और एक वैकल्पिक डिफ़ॉल्ट मान के तरीके।

एनोटेशन को निम्नलिखित प्रकारों पर लागू किया जा सकता है -

स्ट्रिंग प्रकार

एक स्ट्रिंग के लिए एनोटेशन का एक उदाहरण नीचे दिया गया है -

@interface Simple { 
   String str1() default "HelloWorld"; 
}

ईनम प्रकार

enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun } 
@interface Scheduled {
   DayOfWeek dayOfWeek() 
}

वर्ग प्रकार

@interface Simple {} 
@Simple 
class User {
   String username
   int age
}
 
def user = new User(username: "Joe",age:1); 
println(user.age); 
println(user.username);

एनोटेशन सदस्य मान

जब एक एनोटेशन का उपयोग किया जाता है, तो कम से कम सभी सदस्यों को सेट करना आवश्यक होता है जिनके पास डिफ़ॉल्ट मान नहीं होता है। एक उदाहरण नीचे दिया गया है। जब एनोटेशन उदाहरण को परिभाषित किए जाने के बाद उपयोग किया जाता है, तो उसे इसके लिए एक मान दिया जाना चाहिए।

@interface Example {
   int status() 
}

@Example(status = 1)

क्लोजर एनोटेशन पैरामीटर्स

ग्रूवी में एनोटेशन की एक अच्छी विशेषता यह है कि आप एनोटेशन मूल्य के रूप में एक क्लोजर का उपयोग कर सकते हैं। इसलिए एनोटेशन का उपयोग विभिन्न प्रकार के भावों के साथ किया जा सकता है।

इस पर एक उदाहरण नीचे दिया गया है। एनोटेशन ओनिफ़ एक वर्ग मूल्य के आधार पर बनाया गया है। फिर एनोटेशन को दो तरीकों पर लागू किया जाता है जो संख्या चर के मूल्य के आधार पर परिणाम चर के लिए विभिन्न संदेश पोस्ट करता है।

@interface OnlyIf {
   Class value() 
}  

@OnlyIf({ number<=6 }) 
void Version6() {
   result << 'Number greater than 6' 
} 

@OnlyIf({ number>=6 }) 
void Version7() {
   result << 'Number greater than 6' 
}

मेटा एनोटेशन

यह ग्रूवी में एनोटेशन की काफी उपयोगी विशेषता है। ऐसे समय आ सकते हैं, जिसमें आपके पास नीचे दिखाए गए तरीके के अनुसार कई एनोटेशन हो सकते हैं। कभी-कभी यह कई एनोटेशन होने के लिए गड़बड़ हो सकता है।

@Procedure 
@Master class 
MyMasterProcedure {}

ऐसे मामले में आप एक मेटा-एनोटेशन को परिभाषित कर सकते हैं जो एक साथ कई एनोटेशन को क्लब करता है और मेटा एनोटेशन को विधि पर लागू करता है। तो उपरोक्त उदाहरण के लिए आप एनोटेशन कोलोरेक्टर का उपयोग करके एनोटेशन के संग्रह को निर्धारित कर सकते हैं।

import groovy.transform.AnnotationCollector
  
@Procedure 
@Master 
@AnnotationCollector

एक बार यह हो जाने के बाद, आप निम्न मेटा-एनोटेटर को विधि में लागू कर सकते हैं -

import groovy.transform.AnnotationCollector
  
@Procedure 
@Master 
@AnnotationCollector
  
@MasterProcedure 
class MyMasterProcedure {}