Annotations não vieram para substituir o XML. O que acontece é que o trabalho de configuração que era feito em XML, agora é feito em annotations. Porém annotations não substituem XML e por outro lado annotations fazem coisas que antes nem se sonhava em se fazer com XML.
O que eu estava me referindo, é um caso mais ou menos assim: Suponha que o framework escabroso versão java 1.4 utilize interfaces, sobreposição de métodos e herança para fazer o seu serviço (sem utilizar uma única linha de XML). Agora, imagine que na versão java 5 ele passe a usar annotations ao invés de interfaces, sobreposição de métodos e herança. Se o framework for um destes bloatware muito mais complexo do que deveria ser, ao invés de você ter que implementar 10 interfaces, herdar de alguma classe esotérica e ter que sobrepor 50 métodos, você fica com a herança livre, não tem que sobrepor e nem implementar método nenhum, mas em compensação tem que colocar 1000 annotations na sua classe. Enfim, o que eu quis ressaltar aqui é o conceito de POJO. Trocar interfaces, herança e sobreposição por annotations não desvincula a sua classe do framework. Aqui eu não quis dizer nada em relação a XML.
A diferença é que arquivos de configuração são configuráveis diretamente, no cliente mesmo se for o caso. Annotations exigem recompilação.
Acontece que com annotations, não basta você reiniciar. Você tem que recompilar.
Bug na annotation em si, muito difícil. Mas eu estava me referindo ao uso inadequado de uma annotation. Coisa que o compilador pega em pouquíssimos casos e bugs estes que se manifestam em tempo de execução quando um código sem bug (o processador das annotations) é executado. Isso é porque o bug não está no processador das annotations, e sim nos seus dados de entrada, que são obviamente as suas classes. As suas classes por vez possuem código executável perfeitamente válido, o problema está no mal uso da annotation.