Meta adnotacje w Javie

@Target

Określa na jakich elementach można będzie używać adnotacji. Java definiuje ponad 10 opcji. Najczęściej spotykane to:
-ElementType.TYPE – jeśli chcemy aby adnotacja mogła być używana na klasach, interfejsach, enumeracjach czy rekordach
-ElementType.METHOD – jeśli chcemy aby adnotacja mogła być używana na metodach
-ElementType.FIELD – jeśli chcemy aby adnotacja mogła być używana na polach klasy

@Retention

Określa w jakim momencie cyklu życia kodu adnotacja jest widoczna:
SOURCE – tylko na poziomie źródeł (nie zobaczymy jej podczas kompilacji ani w podczas uruchomienia aplikacji)
CLASS – widoczna na poziomie kompilacji
RUNTIME – widoczna w dla kompilatora oraz podczas działania programu

@Inherited

Dzięki temu adnotacja jest propagowana na podklasy klasy na którą jest nałożona.

@Documented

Potrzebna jeśli chcemy aby w JavaDocu zawarte było użycie adnotacji:

@Inherited
public @interface SomeAnnotation { }
class Test{
    @SomeAnnotation
    private String name;
}
JavaDoc:
@SomeAnnotation
private String name;

@Repeatable

Dzięki dodaniu tej adnotacji możliwe jest wielokrotne użycie danej adnotacji.

@Repeatable
public @interface SomeAnnotation { }
class Test{
    @SomeAnnotation
    @SomeAnnotation
    @SomeAnnotation
    private String name;
}