Аннотации и XML-дескрипторы используются для описания некоторых метаданных поверх обычного кода.Основное отличие состоит в том, что в случае аннотаций вам нужно иметь дело только с одним файлом, который содержит код и метаданные.Это также является большим преимуществом аннотаций, поскольку уменьшает количество движущихся частей и повышает производительность.
С другой стороны, недостатком аннотаций является то, что они связывают вместе код и систему или структуру, которая работает с использованием этих аннотаций.Это усложняет их разделение в будущем.
Например, если вы используете аннотации Hibernate, вы связываете объекты модели с помощью Hibernate.Если вы решите переключиться на другую платформу, вам придется вырывать аннотации Hibernate из кода.
Но на практике маловероятно, что вы будете часто менять каркасы.Как правило, существует много других причин, по которым изменение структуры на основе существующего кода может быть трудным.Очень часто аннотации являются хорошим выбором.
Что касается того, как они работают, аннотации являются частью языка и обрабатываются компилятором и другими инструментами и, в зависимости от сохранения, могут быть включены в производимый байт-код для использования вво время выполнения.В конечном счете, именно пользователь должен решить, как использовать аннотации.