Die Spring Component Annotation wird verwendet, um eine Klasse als Komponente zu kennzeichnen. Das bedeutet, dass das Spring-Framework diese Klassen für die Abhängigkeitsinjektion automatisch erkennt, wenn eine annotationsbasierte Konfiguration und das Scannen des Klassenpfads verwendet werden.
Spring-Komponente
Im Klartext ist eine Komponente für einige Operationen verantwortlich. Das Spring-Framework bietet drei weitere spezifische Annotationen, die verwendet werden können, um eine Klasse als Komponente zu kennzeichnen.
Service
: Kennzeichnet, dass die Klasse einige Dienste bereitstellt. Unsere Hilfsklassen können als Service-Klassen gekennzeichnet werden.Repository
: Diese Annotation zeigt an, dass die Klasse CRUD-Operationen durchführt. Üblicherweise wird sie mit DAO-Implementierungen verwendet, die sich mit Datenbanktabellen befassen.Controller
: Wird hauptsächlich bei Webanwendungen oder REST-Webdiensten verwendet, um anzugeben, dass die Klasse ein Frontcontroller ist und dafür verantwortlich ist, Benutzeranfragen zu bearbeiten und eine geeignete Antwort zurückzugeben.
Beachten Sie, dass alle diese vier Anmerkungen im Paket org.springframework.stereotype
enthalten sind und Teil des spring-context
-JAR sind. Meistens werden unsere Komponentenklassen unter eine der drei spezialisierten Anmerkungen fallen, daher wird die Anmerkung @Component
möglicherweise nicht häufig verwendet.
Spring-Komponentenbeispiel
Erstellen Sie eine sehr einfache Spring-Maven-Anwendung, um die Verwendung der Spring Component-Anmerkung zu zeigen und wie Spring sie mit annotationsbasierter Konfiguration und Classpath-Scanning automatisch erkennt. Erstellen Sie ein Maven-Projekt und fügen Sie die folgende Spring-Core-Abhängigkeit hinzu.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
Das ist alles, was wir brauchen, um die Kernfunktionen des Spring-Frameworks zu erhalten. Erstellen Sie jetzt eine einfache Komponentenklasse und markieren Sie sie mit der Anmerkung @Component
.
package com.journaldev.spring;
import org.springframework.stereotype.Component;
@Component
public class MathComponent {
public int add(int x, int y) {
return x + y;
}
}
Jetzt können wir einen annotationsbasierten Spring-Kontext erstellen und die Bean MathComponent
daraus abrufen.
package com.journaldev.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringMainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
MathComponent ms = context.getBean(MathComponent.class);
int result = ms.add(1, 2);
System.out.println("Addition of 1 and 2 = " + result);
context.close();
}
}
Führen Sie die obige Klasse einfach als normale Java-Anwendung aus, und Sie sollten die folgende Ausgabe in der Konsole erhalten.
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
Addition of 1 and 2 = 3
Jun 05, 2018 12:49:26 PM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2018]; root of context hierarchy
Haben Sie die Leistung von Spring bemerkt? Wir mussten nichts tun, um unsere Komponente in den Spring-Kontext einzufügen. Das unten stehende Bild zeigt die Verzeichnisstruktur unseres Spring-Komponentenbeispielprojekts. Sie können auch den Komponentennamen angeben und ihn dann mit dem gleichen Namen aus dem Spring-Kontext abrufen.
@Component("mc")
public class MathComponent {
}
MathComponent ms = (MathComponent) context.getBean("mc");
Obwohl ich die @Component
-Annotation mit MathComponent verwendet habe, handelt es sich eigentlich um eine Service-Klasse, und wir sollten die @Service
-Annotation verwenden. Das Ergebnis wird dennoch dasselbe sein.
Sie können das Projekt aus unserem GitHub-Repository auschecken.
Referenz: API-Dokumentation
Source:
https://www.digitalocean.com/community/tutorials/spring-component