Authors of Annotations wished they provide data about a software program that is not part of the program itself. They have no direct effect on the operation of the code they annotate. Look at LiveDB example to check how much that still remains true. In fact Annotations have a number of uses, among them:
- Information for the compiler — Annotations can be used by the compiler to detect errors or suppress warnings.
- Compiler-time and deployment-time processing — Software tools (like AnnotationProcessors) can process annotation information to generate boilerplate code (like in case of LiveDB, XML files, or other CompileTimeCaches.
- Runtime processing — Some annotations are available to the developer/manager for examination at runtime.
Annotations can be applied to a program's declarations of classes, fields, methods, interfaces, arrays and other program elements. Annotations together with AnnotationProcessors and perfect way to implement embedded DSLs inside Java.