Annotations are meta-meta-objects which can be used to describe other meta-objects. Meta-objects are classes, fields and methods. Asking an object for its meta-object (e.g. anObj.getClass()
) is called introspection. The introspection can go further and we can ask a meta-object what are its annotations (e.g. aClass.getAnnotations
). Introspection and annotations belong to what is called reflection and meta-programming.
Annotation processing is a very powerful mechanism and can be used in a lot of different ways:
- to describe constraints or usage of an element: e.g. @Deprecated, @Override, or @NotNull
- to describe the “nature” of an element, e.g. @Entity, @TestCase, @WebService
- to describe the behavior of an element: @Statefull, @Transaction
- to describe how to proce