Isso é uma discussão infinita, mas vamos lá:
:arrow: Isso é a minha opinião pessoal. Você também pode ter a sua.
:arrow: Vou começar pela [color=blue]vantagem[/color] de usar annotation: ela relaciona a configuração ao configurado, ou seja, ambos ficam num mesmo lugar, sendo mais fácil para você saber qual a configuração de um elemento X pois sua configuração está logo ali em cima.
Agoras as [color=red]desvantagens[/color]:
:arrow: Espalha a configuração pelo código inteiro, ao invés de deixá-la organizada em um arquivo central.
:arrow: Uma alteração na configuração vai forçar um full re-deploy da aplicação, ou seja, você vai ter que gerar o war / jar de novo e fazer o re-deploy.
:arrow: Anotação polui o código. Quando você lê um livro você prefere as páginas limpas ou cheias de anotações? Eu prefiro o texto limpinho, sem uma anotação a cada parágrafo.
:arrow: Anotação não é documentação como eu já ouvi gente falando. Anotação é código. Só que é um código meia-boca, cheio de limitações.
:arrow: Anotação muitas vezes se torna um remendo de código para corrigir alguma limitação da linguagem. Por exemplo: named method parameters.
:arrow: A alternativa é configuração programática, sem XML e anotações. Ela pode ficar separada da aplicação, ser compilada a parte, etc. E a configuração estática dentro dela (nome do banco, usuário, etc) pode ficar separada num arquivo properties.
That’s it. Enjoy! 