Adnotacje mają swoje zastosowanie, ale nie są jedyną srebrną kulą, która zabija konfigurację XML. Polecam zmieszanie tych dwóch!
Na przykład, jeśli używasz Springa, całkowicie intuicyjnie jest używać XML jako części aplikacji polegającej na wstrzykiwaniu zależności. To powoduje, że zależności kodu są oddzielone od kodu, który będzie go używał, natomiast użycie pewnego rodzaju adnotacji w kodzie, który wymaga zależności, uświadamia kodowi tę automatyczną konfigurację.
Jednak zamiast używać XML do zarządzania transakcjami, oznaczanie metody jako transakcyjną z adnotacją ma sens, ponieważ jest to informacja, którą programista prawdopodobnie chciałby znać. Ale interfejs zostanie wstrzyknięty jako PodtypY zamiast PodtypuX, nie powinien być uwzględniany w klasie, ponieważ jeśli teraz chcesz wstrzyknąć SubtypeX, musisz zmienić swój kod, podczas gdy i tak miałeś wcześniej kontrakt interfejsu, więc w przypadku XML wystarczy zmienić mapowania XML, a jest to dość szybkie i bezbolesne.
Nie używałem adnotacji JPA, więc nie wiem, jakie są dobre, ale twierdziłbym, że pozostawienie mapowania fasoli do bazy danych w XML jest również dobre, ponieważ obiekt nie powinien przejmować się skąd pochodzą jego informacje , powinien po prostu dbać o to, co może zrobić z jego informacjami. Ale jeśli lubisz JPA (nie mam z tym żadnego doświadczenia), zdecydowanie idź na to.
Ogólnie: jeśli adnotacja zapewnia funkcjonalność i działa jako komentarz sama w sobie i nie wiąże kodu z jakimś konkretnym procesem, aby normalnie funkcjonować bez tej adnotacji, przejdź do adnotacji. Na przykład metoda transakcyjna oznaczona jako transakcyjna nie zabija logiki działania i służy również jako dobry komentarz na poziomie kodu. W przeciwnym razie informacje te prawdopodobnie najlepiej można wyrazić w formacie XML, ponieważ chociaż ostatecznie wpłyną one na sposób działania kodu, nie zmieni to głównej funkcjonalności kodu, a zatem nie będą znajdować się w plikach źródłowych.
@Component
i@Autowired
, jest to fałszywa dychotomia. Istnieją inne sposoby tworzenia konfiguracji, w tym JavaConfig i groovy config.