A configuração de anotações tem muitas vantagens sobre a configuração XML:
Ele pode fazer uso total do mecanismo de reflexão do Java para obter informações sobre a estrutura da classe, o que pode efetivamente reduzir o trabalho de configuração. Por exemplo, ao usar anotações JPA para configurar o mapeamento ORM, não precisamos especificar nomes, tipos e outras informações de atributos PO. Se os campos da tabela de relacionamento e nomes e tipos de atributos PO forem consistentes, você nem mesmo precisará escrever o atributo de tarefa. informações de mapeamento - porque essas informações podem ser obtidas por meio do mecanismo de reflexão Java.
Os comentários e o código Java estão localizados em um arquivo, enquanto a configuração XML usa um arquivo de configuração independente. A maioria das informações de configuração não será ajustada após o desenvolvimento do programa. Se as informações de configuração e o código Java forem colocados juntos, isso ajuda a melhorar a coesão do programa. o programa. Com arquivos de configuração XML independentes, os programadores geralmente precisam alternar constantemente entre arquivos de programa e arquivos de configuração ao escrever uma função. Essa incoerência de pensamento reduzirá a eficiência do desenvolvimento.
Portanto, em muitos casos, a configuração de anotações é mais popular que a configuração XML, e a configuração de anotações tem uma tendência adicional de popularidade. Um grande aprimoramento do Spring 2.5 é a introdução de muitas classes de anotação. Agora você pode usar a configuração de anotação para concluir a maioria das funções de configuração XML.
Onde a configuração de anotação e a configuração XML são aplicáveis
Com essas anotações do IOC, podemos abandonar completamente o método de configuração XML original? A resposta é não. Existem vários motivos:
A configuração de anotação não é necessariamente superior à configuração XML. Se a dependência do Bean for fixa (como quais classes DAO são usadas pelo Serviço) e essas informações de configuração não forem ajustadas durante a implantação, então a configuração da anotação será melhor que a configuração XML, inversamente, se essa dependência não for ajustada durante a implantação; Quando ocorrem ajustes, a configuração XML é obviamente melhor do que a configuração de anotações, porque as anotações são ajustes no código-fonte Java e você precisa reescrever o código-fonte e recompilar antes de poder implementar o ajuste.
Se o Bean não for uma classe escrita por você (como JdbcTemplate, SessionFactoryBean, etc.), a configuração da anotação não será implementada e a configuração XML será a única forma disponível.
A configuração da anotação tende a ser no nível da classe, enquanto a configuração XML pode ser mais flexível. Por exemplo, em comparação com a anotação de transação @Transaction, a configuração da transação usando o namespace aop/tx é mais flexível e simples.
Portanto, ao implementar aplicativos, muitas vezes precisamos usar a configuração de anotação e a configuração XML ao mesmo tempo. Para configurações no nível de classe que não serão alteradas, a configuração de anotação pode ter prioridade para classes e configurações de terceiros que sejam fáceis de fazer. ajuste, a prioridade deve ser dada ao uso deles na configuração XML. O Spring fundirá as metainformações desses dois métodos de configuração antes de implementar a criação e a injeção de bean.
resumo
O Spring fornece forte suporte para configuração de anotações desde a versão 2.1, e a função de configuração de anotações se tornou um dos maiores destaques do Spring 2.5. O uso razoável da configuração de anotação do Spring 2.5 pode efetivamente reduzir a carga de trabalho de configuração e melhorar a coesão do programa. Mas isso não significa que a configuração XML tradicional irá desaparecer. A configuração XML ainda tem funções insubstituíveis na configuração de classes de bean de terceiros, bem como na configuração de conteúdo como fontes de dados, pools de cache, classes de modelo de operação de camada de persistência, gerenciamento de transações, etc.