2013-03-20 15 views
11

Ho sviluppato applicazioni Web per alcuni anni con il framework Spring. Recentemente, un nuovo membro della mia squadra mi ha fatto una domanda, Spring ha annotazione @Component, qual è il vero scopo delle annotazioni @Repository, @Service, @Controller? Ho cercato di dargli la risposta che non c'è differenza tra loro, solo per identificare i tipi di java Bean. Come sai, la mia spiegazione è priva di persuasione, non l'ha comprata.Spring ha annotazione @Component, qual è il vero scopo delle annotazioni @Repository, @Service, @Controller?

Quindi voglio porre una domanda, qual è il vero scopo delle annotazioni @Repository, @Service, @Controller? qual è la vera differenza tra queste annotazioni?

risposta

8

Questa domanda è stato chiesto prima: What's the difference between @Component, @Repository & @Service annotations in Spring?

In primavera 2.0 e versioni successive, l'annotazione @Repository è un marcatore per qualsiasi classe che svolge il ruolo o stereotipo (anche conosciuto come dati Object Access o DAO) di un repository. Tra gli usi di questo marker è la traduzione automatica delle eccezioni.

Spring 2.5 introduce ulteriori annotazioni sugli stereotipi: @Component, @Service e @Controller. @Component è uno stereotipo generico per qualsiasi componente a gestione di primavera . @Repository, @Service e @Controller sono le specializzazioni di @Component per casi d'uso più specifici, per esempio , nei livelli di persistenza, servizio e presentazione, rispettivamente .

Pertanto, è possibile annotare le vostre classi di componenti con @Component, ma indicandoli con @Repository, @Service, o @Controller invece, le vostre classi sono più propriamente adatti per l'elaborazione con strumenti o associando con aspetti. Ad esempio, queste annotazioni sugli stereotipi rappresentano obiettivi ideali per i collegamenti di punti.

Pertanto, se si sceglie di utilizzare @Component o @Service per il livello di servizio , @Service è chiaramente la scelta migliore. Allo stesso modo, come indicato sopra, @Repository è già supportato come marker per la conversione automatica delle eccezioni nel livello di persistenza.

+0

Una buona spiegazione per la mia domanda, lo capisco perfettamente. Stijn Haus, grazie mille. –

Problemi correlati