@Service vs @Controller
@Service: Klasse ist eine "Business Service Facade" (im Sinne von Core J2EE-Mustern) oder ähnliches.
@Controller: Gibt an, dass eine mit Anmerkungen versehene Klasse ein "Controller" ist (z. B. ein Webcontroller).
---------- Nützliche Hinweise zu wichtigen Stereotypen finden
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Component.html
@ Interface-Komponente
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
public @interface Component
Gibt an, dass eine mit Anmerkungen versehene Klasse eine Komponente ist. Solche Klassen werden als Kandidaten für die automatische Erkennung betrachtet, wenn annotationsbasierte Konfiguration und Klassenpfad-Scan verwendet werden.
Andere Annotationen auf Klassenebene können ebenfalls als identifizierend für eine Komponente angesehen werden, typischerweise eine spezielle Art von Komponente: z. B. die Annotation @Repository oder die Annotation @Aspect von AspectJ.
@ Interface Controller
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
Gibt an, dass eine mit Anmerkungen versehene Klasse ein "Controller" ist (z. B. ein Web-Controller).
Diese Annotation dient als Spezialisierung von @Component, sodass Implementierungsklassen durch das Scannen von Klassenpfaden automatisch erkannt werden können. Es wird normalerweise in Kombination mit kommentierten Handlermethoden verwendet, die auf der Annotation RequestMapping basieren.
@ Interface Service
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Service
Gibt an, dass eine mit Anmerkungen versehene Klasse ein "Dienst" ist, der ursprünglich von Domain-Driven Design (Evans, 2003) als "eine Operation definiert wurde, die als Schnittstelle angeboten wird, die im Modell allein steht und keinen gekapselten Status aufweist". Kann auch darauf hinweisen, dass eine Klasse eine "Business Service Facade" (im Sinne von Core J2EE Patterns) oder ähnliches ist. Diese Anmerkung ist ein allgemeines Stereotyp, und einzelne Teams können ihre Semantik einschränken und gegebenenfalls verwenden.
Diese Annotation dient als Spezialisierung von @Component und ermöglicht die automatische Erkennung von Implementierungsklassen durch das Scannen von Klassenpfaden.
@interface Repository
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Repository
Gibt an, dass eine mit Anmerkungen versehene Klasse ein "Repository" ist, das ursprünglich von Domain-Driven Design (Evans, 2003) als "Mechanismus zum Einkapseln von Speicher-, Abruf- und Suchverhalten, das eine Sammlung von Objekten emuliert" definiert wurde. Teams, die traditionelle J2EE-Muster wie "Datenzugriffsobjekt" implementieren, können dieses Stereotyp auch auf DAO-Klassen anwenden. Dabei sollte jedoch darauf geachtet werden, die Unterscheidung zwischen Datenzugriffsobjekt- und DDD-Repositorys zu verstehen. Diese Anmerkung ist ein allgemeines Stereotyp, und einzelne Teams können ihre Semantik einschränken und gegebenenfalls verwenden.
Eine so kommentierte Klasse kann in Verbindung mit einem PersistenceExceptionTranslationPostProcessor für die Spring DataAccessException-Übersetzung verwendet werden. Die mit Anmerkungen versehene Klasse wird auch hinsichtlich ihrer Rolle in der gesamten Anwendungsarchitektur zum Zweck von Werkzeugen, Aspekten usw. geklärt.
Ab Spring 2.5 dient diese Annotation auch als Spezialisierung von @Component, sodass Implementierungsklassen durch das Scannen von Klassenpfaden automatisch erkannt werden können.