Man unterscheidet lokale und geerbte Annotationen: leitet z.B. die Konfiguration

public interface CarForSaleConfig extends CarConfig {
  @Override
  @Mandatory
  int getHorsePower();

  @Name("price")
  @Mandatory
  double getPrice();
}

​von​

public interface CarConfig extends ConfigurationItem {
  @Name("hp")
  int getHorsePower();

  @Name("color")
  String getColor();
}

ab, so ist die @Name-Annotation an der Eigenschaft price lokal, während die @Name-Annotation an der Eigenschaft hp geerbt ist.

Wie man im obigen Beispiel sieht, darf eine Eigenschaft prinzipiell mehrere Annotationen kombinieren. Die Wertannotationen

  1. Defaultwert
  2. Container
  3. Derived 
  4. Mandatory
  5. Abstract

verhalten sich anders: