Iako si dobio odgovore, vjerujem da ovaj text nece da skodi :)
Anotacije su dakle meta podaci koji se na nivou izvornog koda dodeljuju:
paketima, klasama, metodama, atributima, parametrima metoda, konstruktorima i lokalnim varijablama.
Na ovaj nacin dodjeljeni meta podaci se mogu kasnije prepoznati i koristiti u toku izvršenja programa ili tokom prevodjenja.
Sa stanovišta sintakse, anotacija se dodaje kao: @ImeAnotacije.
Anotacija je interfejs.
Meta-anotacije su "kao" Anotacije o anotacijama. Sistemske meta-anotacije su:
@Retention – nivo ukljucenja anotacije u program
@Target – cemu se pridružuje anotacija
@Documented – da li ce pridružena anotacija biti dokumentovana JavaDoc alatom ili nekim drugim
Tebe konkretno zanimaju Retention i Target...
@Retention:
3 varijante:
@Retention(RetentionPolicy.SOURCE) - anotacije se ne ugraduju u class datoteke
@Retention(RetentionPolicy.CLASS) - anotacije se ugraduju u class datoteke, ali se ne mogu procitati refleksijom
@Retention(RetentionPolicy.RUNTIME) - anotacije se ugraduju u class datoteke i mogu se procitati refleksijom
@Target:
8 varijanti:
@Target(ElementType.ANNOTATION_TYPE) - za definiciju meta-anotacije
@Target(ElementType.CONSTRUCTOR) - anotacija se može dodjeliti samo konstruktorima
@Target(ElementType.FIELD) - anotacija se može dodjeliti samo atributima
@Target(ElementType.LOCAL_VARIABLE) - anotacija se može dodjeliti samo lokalnim promenljivama
@Target(ElementType.METHOD) - anotacija se može dodjeliti samo metodama
@Target(ElementType.PACKAGE) - anotacija se može dodjeliti samo deklaraciji paketa
@Target(ElementType.PARAMETER) - anotacija se može dodjeliti samo parametrima metoda
@Target(ElementType.TYPE) - anotacija se može dodjeliti samo definiciji klase, interfejsa, enumeracije ili anotacije.
I Upotreba:
EJB, Web servisi...
Ps.
Ovo sam iscupao sa nekih slajdova koje sam skoro preuzeo.
Diplomat of swing with aliens at my feet
Comin' down the rampart through beam on the street...