Spring Component Annotation
Die Spring Component Annotation wird verwendet, um eine Klasse als Component zu kennzeichnen. Das bedeutet, dass das Spring Framework diese Klassen für Dependency Injection automatisch erkennt, wenn eine auf Annotationen basierende Konfiguration und Klassenpfad-Scanning verwendet wird.
Spring Component
Im einfachen Sinne ist ein Component verantwortlich für einige Operationen. Das Spring Framework bietet drei weitere spezifische Spring Component Annotationen, die verwendet werden, wenn eine Klasse als Component markiert wird.
- Service: Zeigt an, dass die Klasse einige Dienstleistungen bereitstellt. Unsere Utility-Klassen können als Service-Klassen markiert werden.
- Repository: Diese Annotation zeigt an, dass die Klasse sich mit CRUD-Operationen befasst, üblicherweise wird sie mit DAO-Implementierungen verwendet, die sich mit Datenbanktabellen beschäftigen.
- Controller: Wird meistens bei Webanwendungen oder REST-Webdiensten verwendet, um anzugeben, dass die Klasse ein Front-Controller ist und dafür verantwortlich ist, Benutzeranfragen zu bearbeiten und eine angemessene Antwort zurückzugeben.
Beachten Sie, dass alle diese vier Annotationen im Paket org.springframework.stereotype sind und Teil des spring-context Jars. Meistens werden unsere Component-Klassen unter eine ihrer drei spezialisierten Annotationen fallen, daher werden Sie die @Component Annotation möglicherweise nicht oft verwenden.
Beispiel
Lassen Sie uns eine sehr einfache Spring Maven-Anwendung erstellen, um die Verwendung der Spring Component Annotation zu demonstrieren und wie Spring sie mit einer auf Annotationen basierenden Konfiguration und Klassenpfad-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 benötigen, um die Kernfunktionen des Spring Frameworks zu nutzen. Lassen Sie uns eine einfache Komponentenklasse erstellen und sie mit der Spring Component Annotation Annotation kennzeichnen.
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 auf Annotationen basierenden Spring-Kontext erstellen und daraus den MathComponent Bean beziehen.
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 einfach die obige Klasse als normale Java-Anwendung aus und Sie sollten 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 Stärke von Spring erkannt? Wir mussten nichts tun, um unsere Komponente in den Spring-Kontext zu injizieren.
Wir können auch den Namen der Komponente angeben und sie dann unter Verwendung desselben Namens aus dem Spring-Kontext beziehen.
@Component("mc")
public class MathComponent {
}
MathComponent ms = (MathComponent) context.getBean("mc");
Obwohl ich die @Component Annotation mit MathComponent verwendet habe, ist es tatsächlich eine Service-Klasse und wir sollten die @Service Annotation verwenden. Das Ergebnis wird immer noch das gleiche sein.