2016-02-17 15 views
6

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

+2

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

risposta

6

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.

1

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.