Аннотации имеют свое применение, но они не являются единственной серебряной пулей, способной убить конфигурацию XML. Я рекомендую смешать два!
Например, при использовании Spring совершенно интуитивно понятно использование XML для части вашего приложения, связанной с внедрением зависимостей. Это уводит зависимости кода от кода, который будет его использовать, напротив, использование какой-то аннотации в коде, который нуждается в зависимостях, делает код осведомленным об этой автоматической конфигурации.
Однако вместо использования XML для управления транзакциями отметка метода как транзакционного с помощью аннотации имеет смысл, поскольку эту информацию программист, вероятно, захочет узнать. Но то, что интерфейс будет внедрен как SubtypeY вместо SubtypeX, не должен быть включен в класс, потому что, если теперь вы хотите ввести SubtypeX, вам нужно изменить свой код, тогда как у вас в любом случае был контракт интерфейса, поэтому с XML вам просто нужно изменить сопоставления XML, и это довольно быстро и безболезненно.
Я не использовал аннотации JPA, поэтому не знаю, насколько они хороши, но я бы сказал, что оставить отображение bean-компонентов в базе данных в XML тоже хорошо, поскольку объекту не должно быть дела до того, откуда взялась его информация. , ему просто нужно заботиться о том, что он может делать со своей информацией. Но если вам нравится JPA (у меня нет опыта в этом), во что бы то ни стало, дерзайте.
В общем: если аннотация предоставляет функциональные возможности и действует как комментарий сама по себе и не связывает код с каким-то конкретным процессом, чтобы нормально функционировать без этой аннотации, тогда переходите к аннотациям. Например, транзакционный метод, помеченный как транзакционный, не уничтожает его операционную логику, а также служит хорошим комментарием на уровне кода. В противном случае эту информацию, вероятно, лучше всего выразить в виде XML, потому что, хотя она в конечном итоге повлияет на работу кода, она не изменит основную функциональность кода и, следовательно, не принадлежит исходным файлам.
@Component
и@Autowired
, это ложная дихотомия. Есть и другие способы создать свою конфигурацию, включая JavaConfig и groovy config.