Wozu sind Annotations da?

Bitte aktiviere JavaScript!
Hallo,

ich verstehe den Sinn und Zweck von Annotations (genau genommen Annotations von Spring Boot) nicht.

Von dem was ich so gelesen habe, erleichtern Annotations die mühsamen XML-Konfigurationen. Jetzt verstehe ich aber noch viel weniger, denn die einzige XML-Datei in meinem Projekt ist pom.xml.

Als Beispiel kann ich die Annotation @Autowired nennen:
Java:
@Autowired
private UserService userService;
Was macht sie genau und wozu ist sie da?
 
Haha, ich versuche es mal (das Thema hab ich erst kürzlich hier aufgeworfen):

Annotationen sind im Prinzip erweiterte Anweisungen/Informationen für den Compilevorgang. Irgendwo in deiner Bibliothek (möglicherweise für dich nicht sichtbar) schlummert noch ein AnnotationProcessor. Diesen läßt der Compiler während des Bauens ein oder mehrmals über das Projekt laufen und nimmt z.B. irgendwelche Regelprüfungen vor. (In meinem Fall sollten bestimmte Generics weitervererbt werden.)

Mit der Annotation sagst du dem Compiler, daß ein bestimmter Annotaionsprozessor da mal drüberschauen muß.
 
Um das etwas weiter zu fassen als @White_Fox: Annotationen sind einfach nur „Notizen“ zu irgendeinem Element.

Die machen erstmal nichts, sie sind einfach nur da.
Damit was passiert, muss irgendwer diese auswerten, das macht zB javac für bestimmte Annotationen, andere dienen der IDE als Hinweise oder werden wie von @White_Fox schon gesagt von Annotation-Prozessoren zur Build-Zeit ausgewertet.

Annotationen können aber auch erst zur Laufzeit ausgewertet werden, das passiert in diesem Fall durch das Spring-Framework.
Autowired bedeutet in diesem Fall nur, „wenn eine Bean dieser Klasse erstellt wird, füll das Feld mit einem passenden Objekt“


(Zumindest in der Kurzfassung, die Langfassung hi Annotationen und Spring dürfte mehrere Bücher umfassen...)
 
Java Annotations sind erstmal nichts weiter als beliebige "Meta"-informationen, die du an Klassen, Felder, Methodenparameter und vielen weiteren Elementen unterbringen kannst. In deinem Beispiel hängt die Annotation `org.springframework.beans.factory.annotation.Autowired` an dem Feld `userService`.
Diese Annotationen können dann zu beliebigen Zeiten durch diverse Mechanismen ausgewertet werden:
- zur Compile-Zeit im Java Parser als Annotation Processor
- per Classfile Parser zur Laufzeit aus einer .class Datei
- per Java Core Reflection API zur Laufzeit
Im Beispiel von Spring werden die Annotationen mit letzterem Mechanismus zur Laufzeit ausgewertet, um herauszufinden, welche Felder einer Klasse automatisch bei Erzeugung einer Bean mit den Abhängigkeiten initialisiert werden sollen. Die Annotation `Autowired` dient bei Spring also der Dependency Injection.
Java Annotations bilden seit Java 1.5 und seit Spring 2.5 eine weitere Möglichkeit, die Dependency Injection Konfiguration per Annotations im Code vorzunehmen und nicht per Spring XML Dateien.
Da es Spring schon länger gibt als es Annotations gibt (seit Java 1.5), wurden eben früher XML Dateien verwendet, um diesen Teil der Konfiguration abzubilden.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben