Perché è necessario utilizzare @service
all'interno del servizio Implementazione e @repository
nell'implementazione DAO. Non si verificano problemi quando interscambio l'annotazione @service
e @repository
nel MVC di primavera.Cosa succederà se scambiamo l'annotazione @service e @repository nella primavera MVC
risposta
Secondo documentaion@Repository
, @Service
, @Controller
sono tutti sinonimi. Sono tutte solo specializzazioni dell'annotazione @Component
. Quindi, generalmente, possono essere utilizzati l'uno di seguito all'altro. Ma ... non dovresti farlo.
Primo motivo: qualsiasi di queste annotazioni chiarisce il ruolo del componente nell'applicazione. Mostra: questo componente appartiene al controller, al servizio o al livello dati.
Seconda ragione: alcune di queste annotazioni sono state elaborate in modo diverso da diversi moduli Spring. Ad esempio, Spring Data JPA
elaborerà @Repository
e tenterà di sostituire con l'implementazione qualsiasi interfaccia contrassegnata da questo annotaione. Spring applicherà anche la traduzione automatica delle eccezioni a tali classi. Un altro esempio, il processo Spring Web MVC
@Controller
e utilizza le classi contrassegnate con esso nei mapping URL.
In realtà, nelle versioni future, alcuni moduli di Spring potrebbero elaborare @Service
in modo particolare. Non è così semplice @Component
. Ecco perché consiglio documentazione:
E 'anche possibile che @Repository, @Service, e @Controller possono portare semantica supplementari in future versioni di Spring Framework. Pertanto, se si sceglie di utilizzare @Component o @Service per il livello di servizio , @Service è chiaramente la scelta migliore.
Dipende da ciò che si utilizza per il resto del framework. In teoria, nulla cambia in quanto le annotazioni @Service
e @Repository
sono fondamentalmente le annotazioni @Component
. Lo stesso si può dire per @Controller
o @Endpoint
(per Spring Ws e ce ne sono altri).
Tuttavia esprimono un intento di cosa sia una classe (un servizio, un repository) e rende chiaro all'utente quale strato appartiene a tale classe.
Tuttavia, se si utilizza anche per la primavera managemnt transazione poi @Repository
è anche un trigger per adding exception translation a quella classe (vedi anche la reference guide).
Anche se lo è stato interrotto probabilmente lo sarà a un certo punto.
Questo probabilmente rovinerebbe le vostre transazioni. Un servizio deve passare transazioni che necessitano di propagazione al DAO. Entrambi sono componenti quindi la creazione di un bean non costituirà un problema. – TheLostMind