Talking generic, there are programming languages who make more or less use of annotations and decorators.
Be it to add type information to variables in a dynamically typed language or to add "metadata" to methods and classes in a framework context. The "purpose" of them is always to in some way extend the language in it's abilities or to make it more flexible in a certain way.
Now this all seems nice right? Using a dynamically typed language and want to add some type information to your variables? - Just use them decorators. Need to make that class to be managed remotely by an app-server? Tell it by adding an annotation.
Those things look like symptoms to me. Symptoms being caused by an underlying design problem. Or am I massively wrong about that?