La mia opinione su questo argomento è che la configurazione xml riduce la chiarezza del codice, specialmente nei sistemi di grandi dimensioni.
Le annotazioni come @Component rendono le cose ancora peggiori. Permette agli sviluppatori di rendere gli oggetti mutabili, poiché le dipendenze non possono essere rese definitive più tardi, dato che devono essere forniti costruttori predefiniti. Le dipendenze devono essere o iniettate tramite server pubblico o incontrollate tramite @Autowired. [l'iniezione di dipendenza ancora peggiore è compromessa con le classi che istanziano le loro dipendenze, lo vedo ancora nel codice appena scritto!]. Intendo dire che, in sistemi di grandi dimensioni, quando sono disponibili più implementazioni (o figli) del tipo, diventa molto più complicato capire quale delle implementazioni è stata @Autowired, una complessità che rende molto più difficile l'investigazione dei bug. Significa anche che, presumibilmente hai un profilo per l'ambiente di test e un altro per la produzione, i bug di produzione si verificano solo quando fa più male - in produzione, piuttosto che essere in grado di individuare i bug nell'ambiente di test, o anche meglio, a compilare il tempo!
mi attengo alla terra di mezzo in cui dichiaro la mia classe di configurazione (es), (configurazione Spring sulla base Java utilizzando @Configuration)
Dichiaro tutti i miei fagioli esplicitamente nella classe di configurazione (es). Uso solo @Autowired nella classe di configurazione (es), lo scopo è limitare la dipendenza su Spring alle classi di configurazione
La configurazione @ risiede in un pacchetto specifico, che è l'unico posto in cui viene eseguita la scansione a molla . (Che accelera il tempo di inizio sostanzialmente in grandi progetti)
Mi sforzo di rendere tutte le mie classi immutabili, in particolare l'oggetto dati, JPA, Hibernate e Spring, così come molte librerie di serializzazione sembrano minare questo. Mi allontano da tutto ciò che mi costringe a fornire setter, o rimuovere la parola chiave finale dalla mia dichiarazione di proprietà.
Ridurre le possibilità di modifica degli oggetti dopo la loro creazione, riduce sostanzialmente i bug nel sistema di grandi dimensioni e riduce il tempo di trovare un bug quando ne esiste uno.
Sembra inoltre che costringa lo sviluppatore a progettare meglio l'interazione tra le diverse parti del sistema. I problemi e gli errori diventano sempre più errori di compilazione, che riducono lo spreco di tempo e migliorano la produttività.
Sono interessato anche a questo argomento: la configurazione dell'app MVC tramite annotazioni anziché XML sembra che porterebbe a molte ricerche su "quale classe è mappata a questo URL?" "chi sta gestendo questo?". Mi piace avere una singola fonte di configurazione –
il termine "@Autowiring" sembra essere fuorviante qui.Poiché puoi anche eseguire l'autowiring con la configurazione XML, la domanda originale dovrebbe essere riformulata come "Pro e contro dell'uso delle annotazioni Spring". La risposta fornita si concentra più sugli aspetti dell'autowiring e meno sugli aspetti dell'uso delle annotazioni. –
Possibile duplicato di [Understanding Spring @Autowired usage] (https://stackoverflow.com/questions/19414734/understanding-spring-autowired-usage) – tkruse