Adnotacja to taki znacznik, który wykorzystywany jest głownie do narzędzi/frameworków w celu dokonania jakiś określonych operacji na oznaczonym elemencie. Atutem adnotacji jest to że jeśli dany element jest nią oznaczony to nie wpływa to bezpośrednio na działanie tego czegoś. Dobrym przykładem może być JPA. Stosując JPA oznacza się elementy adnotacjami, a mechanizmy implementujące JPA wykorzystują to do zmapowania javy do SQL i odwrotnie, ale z klasy encji nadal można korzystać w standardowy dla języka Java sposób:
@Entity
class SomeClass
{
@Id
private Integer id;
private String field;
//settery gettery
}
//nie ma problemu żeby użyć tej klasy w zwyczajny sposób:
SomeClass sc = new SomeClass();
sc.setId(12);
Z programistycznego punktu widzenia adnotacje mają trzy zakresy działań: SOURCE (dostęp do adnotacji jest z poziomu kodu i nie są one dołączane do klasy w procesie kompilacji), CLASS (to służy do jakiś niskopoziomowych zagadnień, w których się nie orientuję), i trzeci zakres to RUNTIME (za pomocą tego typu można przetwarzać adnotacje za pomocą API refleksji).