The Java Language Specification describes Annotations as follows:
An annotation is a marker which associates information with a program construct, but has no effect at run time.
Annotations may appear before types or declarations. It is possible for them to appear in a place where they could apply to both a type or a declaration.
What exactly an annotation applies to is governed by the "meta-annotation"
@Target. See "Defining annotation types" for more information.
Annotations are used for a multitude of purposes. Frameworks like Spring and Spring-MVC make use of annotations to define where Dependencies should be injected or where requests should be routed.
Other frameworks use annotations for code-generation. Lombok and JPA are prime examples, that use annotations to generate Java (and SQL) code.
This topic aims to provide a comprehensive overview of:
How to define your own Annotations?
What Annotations does the Java Language provide?
How are Annotations used in practice?