Le annotazioni hanno il loro uso, ma non sono l'unico proiettile d'argento a uccidere la configurazione XML. Consiglio di mescolare i due!
Ad esempio, se si utilizza Spring, è del tutto intuitivo utilizzare XML per la parte di iniezione di dipendenza dell'applicazione. Ciò allontana le dipendenze del codice dal codice che lo utilizzerà, al contrario, l'utilizzo di una sorta di annotazione nel codice che necessita delle dipendenze rende il codice consapevole di questa configurazione automatica.
Tuttavia, invece di utilizzare XML per la gestione transazionale, contrassegnare un metodo come transazionale con un'annotazione ha perfettamente senso, poiché si tratta di informazioni che un programmatore vorrebbe probabilmente conoscere. Ma che un'interfaccia che verrà iniettata come Sottotipo invece di un Sottotipo non dovrebbe essere inclusa nella classe, perché se ora desideri iniettare Sottotipo, devi cambiare il tuo codice, mentre prima avevi un contratto di interfaccia, quindi con XML, dovresti solo cambiare i mapping XML ed è abbastanza veloce e indolore farlo.
Non ho usato le annotazioni JPA, quindi non so quanto siano buone, ma direi che lasciare anche la mappatura dei bean sul database in XML è buono, poiché all'oggetto non dovrebbe importare da dove provengono le sue informazioni , dovrebbe solo preoccuparsi di cosa può fare con le sue informazioni. Ma se ti piace JPA (non ho alcuna esperienza con esso), sicuramente, provaci.
In generale: se un'annotazione fornisce funzionalità e agisce come un commento in sé e per sé, e non lega il codice a un processo specifico per funzionare normalmente senza questa annotazione, scegli le annotazioni. Ad esempio, un metodo transazionale contrassegnato come transazionale non uccide la sua logica operativa e funge anche da buon commento a livello di codice. Altrimenti, questa informazione è probabilmente meglio espressa come XML, perché anche se alla fine influenzerà il funzionamento del codice, non cambierà la funzionalità principale del codice e quindi non appartiene ai file di origine.
@Component
e@Autowired
, questa è una falsa dicotomia. Esistono altri modi per creare la configurazione, tra cui JavaConfig e groovy config.