Interfaces is an object modeling technique that allows objects to implement behavior (but not state) associated with several types.
Annotations are a method for embedding typed metadata in your code; this metadata is intended for use by tools (test frameworks, code generators, etc.), but they do not have language level semantics. You can think of them as structured / typed comments attached to specific program elements that can be accessed through reflection.
Under the hood, annotations are implemented as interfaces, mostly as a matter of convenience, but the similarities are probably more confusing than useful for understanding what they are intended for.
source share