The question is valid and interesting.
It is important to differentiate between configuration (as something that can be configured by an end user) and meta programming (as something that is related to actually development, that is known and can be verifed at compile time).
Question: Aren't we loosing the liberty of externalizing configuration management?
Answer: Such an externalization can be achived by using XML configuration. But it can also be achieved by using an interface with multiple classes, where different classes have different annotations.
Question: Also we are tying a class with Annotation to AnnotationClass...Isnt it breaking design pattern rule of loose coupling?
Answer: Again, if we use interface/implementation technique, we can end up with a clean interface and implementation with annotations. With this approach you can replace an XML-based implmentation to annotation-based and vice versa.
Question: Reusing a class if a class is associated with a particular Annotation and tommorow if we want to use the same class in some other environment I think we either need to rebuild the class or rewrite a seperate class with similar attributes/methods.
Answer: Once again, by using interface/implementation separation approach we can achieve independence from the underlying configuration and the way configuration is applied.
Java Development on Demand