Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Spring Framework Grundkurs

Dependency Injection mit Hilfe von Annotationen

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Anders als mit XML kann mithilfe von Annotationen die Konfiguration von Dependency Injection auch unmittelbar im Code vorgenommen werden: mit @Component, @Autowire und @Configuration.

Transkript

XML ist gerade für Programmierer nicht immer die angenehmste Art und Weise die Anwendung zu konfigurieren. Aus genau diesem Grund lässt sich Spring auch auf verschiedene Arten und Weisen konfigurieren, einerseits auch über die Möglichkeit direkt im Code mit Hilfe von Annotationen. Welche Annotationen hierfür wichtig sind und wie diese korrekt eingesetzt werden ist Teil dieses Videos. Grundsätzlich gibt es nun also zwei verschiedene Arten und Weisen, wie Spring definiert werden kann. Einerseits im Code und andererseits außerhalb mit Hilfe von XML. Wenn man nun beide kombiniert, dann wird im Regelfall die Annotation immer vor der XML-Datei benutzt. Alles was die XML zusätzlich deklariert wird dann also überschrieben. Damit bestünde nun also die Möglichkeit einerseits auf der Programmierer-Ebene Spring selbst zu deklarieren und anderen Nutzern es außerhalb zu ermöglichen Komponenten anhand von XML-Konfigurationen auszutauschen. Wie aktiviert man also diese Vorgänge? Wenn man also eine Teils-Teils-Lösung benutzt, würde man einerseits im XML mithilfe von None einen Prozess anstoßen, der anhand von Annotationen bestimmte Dinge initialisiert. Oft in diesem Zusammenhang verwendet ist auch der Kontext Component Scan. Dieser sucht also über die verschiedenen Klassen hinweg nach den bestimmten Annotationen, wie z. B. "component". Um nun konkret im Code einen Container zu erstellen, so wie er in XML existiert würde man also die Container-Konfiguration nutzen. Sie sammelt, genau wie die XML-Container-Deklaration Beans innerhalb einer eigenen Registry. Die Annotation hierfür ist @Configuration. Damit wird aus der jeweiligen Klasse ein Container, der Beans beinhaltet. Statt nun beispielsweise einen ClassPathApplicationContext zu verwenden würde man an dieser Stelle den AnnotationConfigApplicationContext verwenden. Wenn man nun verschiedene Felder innerhalb dieser Klasse spezifiziert kann mit der Annotation Bean festgelegt werden, dass es sich dabei um eine Bean handelt. Bei Verwendung der Annotation Component kann man eine Klasse auch automatisch als Bean deklarieren lassen. Prinzipiell kann man Component also für jede Klasse verwenden, allerdings gibt es auch Spezialisierungsfälle von Component beispielsweise der Controller. Diese wird oft im Zusammenhang mit Web-Anwendungen verwendet, die den Prinzipien von Model View Controller entsprechen. Des Weiteren gibt es die Annotation Service die auch von Component abstammt. Diese wird bei Webservices verwendet. Eine weitere Spezialisierung ist das Repository. Dieses wird z. B. verwendet für Datenbanken. Es gibt noch viele weitere Sonderfälle, wo statt Component eine Spezialisierung verwendet werden kann. Prinzipiell ist aber Component immer gültig. Im Normalfall deklariert man auch Abhängigkeiten über XML. Mithilfe der Annotation @Autowired können automatisch Abhängigkeiten in die Klassen injiziert werden. Autowired lässt sich anwenden sowohl für Felder als auch für Setter-Methoden als auch für normale Methoden, die bestimmte Argumente beinhalten, die Beans sind, als auch zu guter Letzt den Konstruktoren. An sich nimmt Autowired immer die erstbeste Instanz die der Kontext liefern kann. In manchen Fällen möchte man aber auch bestimmte Beans injizieren. Für genau diese Fälle würde man den Qualifier verwenden. Dieser schränkt die Injektion durch Autowired anhand eines Namenskriteriums standardmäßig ein. An der Stelle ist es auch möglich, einen eigenen Qualifier zu definieren, der nach bestimmten eigenen Kriterien und Gesichtspunkten den Autowired-Befehl einschränken kann. Dafür würde man dann ein eigenes Kriterium anhand eines Aspektes einführen. Neben vielen der eingenimplementierten Annotationen unterstützt Spring auch einige des Java-Standards. Beispielsweise der Java Standard Recommendation 250 sieht die Annotation PreDestroy und PostConstruct vor. Diese deklarieren jeweils Methoden, die einerseits wie PostConstruct kurz nach der Erzeugung einer Bean aufgerufen werden oder wie PreDestroy, nachdem die Bean zerstört wird, also der Applikationskontext beendet. Mit Hilfe von Resource lässt sich nun auch eine Bean anhand des Namens injizieren. Dies entspricht in etwa den Prinzipien von Autowired und Qualifier kombiniert. Des Weiteren unterstützt Spring auch die Java Standard Recommendation 330 die die Inject-Annotation vorsieht. Diese funktioniert zu 100 Prozent wie Autowired indem sie eine Bean eines bestimmten Typs direkt injiziert. Aufgrund der Kompatibilität mit den Java Standard Recommendations kann das Spring Framework also auch alternativ zur Java Enterprise Edition in bestimmten Fällen eingesetzt werden. Diese ganzen Konstrukte möchte ich Ihnen nun noch anhand eines praktischen Beispiels veranschaulichen. Zunächst einmal ist es also wichtig, dass die richtigen Abhängigkeiten definiert sind. Das sind einerseits die Abhängigkeit zum klassischen Spring Framework und der Dependency Injection im Spring Kontext und die jeweiligen Abhängigkeiten zur Java Standard Recommendation. Wenn man diese Anwendungen nun ausführt, sieht man, dass zunächst ein HelloWorldPrinter initialisiert wird. Es gibt eine Nachricht, es gibt eine weitere Nachricht und dann wir der heruntergefahren. Das Ganze spielt sich in der Main-Klasse ab, wo zunächst der Annotations-Applikationskontext initialisiert wird. anhand der SpringConfiguration.class. Danach wird der HelloWorldPrinter abgeholt mithilfe von getBean und dementsprechend die Print-Methode ausgelöst. Als nächstes wird dann der Kontext beendet und dementsprechend auch alles heruntergefahren. In der SpringConfiguration befindet sich also nun die Konfiguration für die Beans, gekennzeichnet durch die Angabe von @Configuration wird also nun mithilfe der Angabe von @Bean die jeweilige Bean initialisiert, in dem Fall HelloWorldService und HelloWorldServiceExtended. Zusätzlich durch die Angabe von Component-Scan wird das Paket scan, das hier den HelloWorldPrinter beinhaltet nach Beans durchsucht. Zu beachten ist an dieser Stelle immer auch wenn man eine Bean initialisiert muss man diese auch selbst erzeugen und gegebenenfalls auch die Properties bereitstellen. Der HelloWorldPrinter wird nun dadurch gefunden, dass die Angabe @Component existiert. Mithilfe von @Inject und der Angabe der jeweiligen Klasse wird nun automatisch der HelloWorldService in den HelloWorldPrinter hineingeladen. Durch die Nutzung von Resource und der Angabe des Namens wird eine ganz bestimmte Bean hineingeladen, die HelloWorldServiceExtended. Die Bezeichnung dafür entstammt dem Namen. Der HelloWorldPrinter nutzt also beide Abhängigkeiten und gibt die Nachricht aus. Zum Schluss wird, wenn er heruntergefahren wird, eine Nachricht ausgegeben und auch in dem Falle, dass er hochgefahren wird. Damit ist es also möglich, alle Abhängigkeiten gegebenenfalls zu beenden. Beachtet werden sollte auch noch, dass in der Hauptklasse statt dem normalen ApplicationContext-Interface der sogenannte AbstractApllicationContext verwendet wird, denn ApplicationContext ist eigentlich für Web-Anwendungen gedacht die automatisch beendet werden können. Nur der AbstractApplicationContext ermöglicht es einen ShutdownHook zu setzten. Sie haben also die Möglichkeiten gesehen auch zukünftig ohne XML-Konfiguration und nur mit dem Code arbeiten zu können.

Spring Framework Grundkurs

Steigen sie zum Java-Champion auf und meistern Sie den Umgang mit dem Spring Framework.

2 Std. 4 min (20 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Spring Framework Spring Framework 3
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.09.2014

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!