2009-04-30 17 views
7

मैं जावा में एनोटेशन के उद्देश्य पर अभी भी स्पष्ट नहीं हूं। शुरू में मैंने सोचा कि वे सिर्फ दस्तावेज़ीकरण के रूप में कार्यरत हैं। लेकिन Google App Engine Datastore से इस दस्तावेज़ को देखकर, मुझे पूरा यकीन नहीं है। @PersistenceCapable (IdentType = IdentityType.APPLICATION) एक विधि हस्ताक्षर की तरह दिखता है।ये जावा एनोटेशन क्या काम करते हैं?

इस प्रकार की एनोटेशन का उद्देश्य क्या है? यह क्या करता है?

import java.util.Date; 
import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.IdentityType; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class Employee { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent 
    private String firstName; 

    @Persistent 
    private String lastName; 

    @Persistent 
    private Date hireDate; 

    public Employee(String firstName, String lastName, Date hireDate) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.hireDate = hireDate; 
    } 

    // Accessors for the fields. JDO doesn't use these, but your application does. 

    public Long getId() { 
     return id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    // ... other accessors... 
} 

उत्तर

9

वे स्रोत-स्तर मेटाडेटा हैं। वे उस कोड में जानकारी जोड़ने का एक तरीका हैं जो कोड नहीं है, और यह आसानी से मशीन-संसाधित है।

आपके उदाहरण में, वे उस इकाई प्रकार के लिए ऑब्जेक्ट-रिलेशनल मैपिंग को कॉन्फ़िगर करने के लिए उपयोग किए जाते हैं। यह कह रहा है कि उदाहरण के लिए आईडी फ़ील्ड उस ऑब्जेक्ट की प्राथमिक कुंजी होनी चाहिए, और वह पहला नाम, lastName, और hireDate डेटाबेस में संग्रहीत किया जाना चाहिए। (कुछ फ़ील्ड ऑब्जेक्ट स्टेटस के अलावा उन फ़ील्ड को बताने के लिए।)

जेडीओ के लिए जीएई समर्थन को यह जानने की जरूरत है कि आप डेटाबेस में स्टोर करने का प्रयास करेंगे। यह आपके कोड में कक्षाओं को देखकर ऐसा करता है, जो @PersistenceCapable के साथ एनोटेट किए गए लोगों की तलाश में है।

आम तौर पर, वे उस स्थान को बदलने के लिए उपयोग किए जाते हैं जहां आप पहले बाहरी कॉन्फ़िगरेशन फ़ाइलों का उपयोग करेंगे; जावा मानक लाइब्रेरी में आपके कोड में एनोटेशन पढ़ने के लिए टूल हैं, जो आपको अपनी कॉन्फ़िगरेशन फ़ाइल प्लंबिंग रोल करने की तुलना में प्रक्रिया करना अधिक आसान बनाता है, और आपको मुफ्त में आईडीई समर्थन प्राप्त करता है।

+1

ठीक है, तो यह कक्षा, फिर आपके मॉडल को परिभाषित करने का एक शॉर्टेंड तरीका है। पुराने दिनों में, जैसा कि आपने कहा था, आपके पास स्ट्रूट्स में एक कॉन्फ़िगरेशन फ़ाइल हो सकती है जहां आप अपने मॉडल को कॉन्फ़िगर करने के लिए टेक्स्ट नोटेशन का उपयोग करेंगे। लेकिन यहां हम एनोटेशन के साथ एक ही काम कर रहे हैं। और मैं मानता हूं कि एनोटेशन काम आपके द्वारा उपयोग की जा रही लाइब्रेरी के आधार पर भिन्न होता है और कैसे उस लाइब्रेरी ने एनोटेशन को काम करने के लिए परिभाषित किया है। तो, @Persistent का मतलब जेडीओ लाइब्रेरी में एक बात हो सकती है लेकिन किसी अन्य पुस्तकालय में एक और चीज है। – Bijou

+0

हां। उदाहरण के लिए हाइबरनेट में, आप इस कॉन्फ़िगरेशन या जेपीए एनोटेशन करने के लिए या तो .hbm.xml फ़ाइलों का उपयोग कर सकते हैं। लाइब्रेरी के लिए यह अर्ध-आम है कि किसी अन्य द्वारा निर्दिष्ट एनोटेशन का उपयोग करें। इस उदाहरण में, जेडीओ एक जावा विनिर्देश है कि कई पुस्तकालय समर्थन/कार्यान्वित करते हैं। तो यह Google App Engine डेटास्टोर जेडीओ एनोटेशन पढ़ रहा है। हालांकि यह कम आम बात है कि उनके पास एक अलग अर्थ होगा। यह निश्चित रूप से पूरी तरह से संभव है, और प्रोग्रामेटिक रूप से मेटाडेटा (एनोटेशन) के माध्यम से ऐसा करना आसान है (कुछ तरीकों को कॉल करना)। – millimoose

0

मुझे लगता है कि ये Java Data Objects API से आते हैं। यह एक एपीआई है जो ईजेबी 3 को पूरा करने के साथ डिग्री के साथ ओवरलैप हो जाती है। वही अवधारणाएं, विभिन्न वाक्यविन्यास और औजार।

आप सामान्य रूप में एनोटेशन के साथ परिचित नहीं हैं, Java tutorial.

1

एनोटेशन जाँच को स्वत: जनरेट बॉयलरप्लेट कोड को Annotation Processing Tool APIs के साथ कार्रवाई की जा सकती है।

संबंधित मुद्दे