Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Spring Framework Grundkurs

Was ist Dependency Injection?

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Nur, wer die Prinzipien von Dependency Injection bzw. Inversion of Control kennt, wird das Fundament des Spring Frameworks verstehen können.

Transkript

Das Spring Framework und die Dependency Injection sind zwei eng miteinander verknüpfte Begriffe. Wenn Sie sich schon immer gefragt haben, was Dependency Injection eigentlich ist erhalten Sie in diesem Video darüber Aufschluss. Zunächst einmal möchte ich dafür mit einem Beispiel beginnen. Viele Menschen fahren gerne Auto, weshalb es z. B. eine Klasse "Auto" gibt. Und die Methode "fahren" entsprechend. Zum Fahren braucht ein Auto immer "Benzin" Leider ist das Unglückliche an dem Fahren eines Autos, dass das Benzin auch verbraucht wird. In der aktuellen Aufstellung ist das Ganze natürlich etwas unglücklich. In dem Moment, wo ich mir so ein neues Auto besorge, kann ich es nun fahren. Ich sehe jetzt allerdings nicht, wo das Benzin herkommt, was prinzipiell bedeutet: es gibt hier ein Verantwortlichkeitsproblem. Denn unglücklicherweise stellt das Auto sein Benzin selbst her. Allerdings besorgt der Besitzer im Regelfall das Benzin an der Tankstelle. Probleme, die sich hier nun ergeben sind dass das Benzin und das Fahren direkt aneinander gekoppelt sind. Da diese Kopplung nach außen unsichtbar ist, ist es auch schwierig zu testen, was unter bestimmten Verhältnissen von Benzin passiert. Der einfachste Weg nun ist, das Benzin schlicht und einfach zum Parameter der Methode zu machen. Nun erzeugt das Auto selbst kein Benzin mehr, sondern das Benzin wird vom Fahrer, bzw. demjenigen der das Auto nutzt, erzeugt und zum Fahren übergeben. Nichtsdestotrotz hat auch das einige Probleme, denn das Auto kann nun auch ohne Benzin existieren, man braucht es nur explizit zum Fahren. Allerdings hat man ohne Benzin im Regelfall auch kein Auto denn irgendwie muss es ja initial auch einmal fahren können, und sollte nicht jedes x-beliebige Benzin übergeben bekommen. Um das Benzin zu einem fixen Bestandteil des Autos zu machen, deklariert man es schlicht und einfach als Variable und fordert es im Konstruktor. Zukünftig muss dann auch nicht im Aufrufen von "fahren" auf dem "Auto" dementsprechend irgendein "Benzin" mitgegeben werden. Nun kann es zu jeder Zeit dazu kommen, dass sich die Anforderungen an das Auto ändern, z. B. wie wahrscheinlich zukünftig möglich fahren die Autos nun dementsprechend mit Strom. Das Benzin wird nicht mehr benötigt oder auch nur alternativ genutzt. Um diese Anforderungen sicherstellen zu können, muss eine Generalisierung der Kraftstoffart vorgenommen werden. Denn nun kann jedes Auto mit verschiedenen Kraftstoffarten fahren. Die einzige Sicherheit, die es dabei gibt ist dass auf jeden Fall der Kraftstoff verbraucht wird. Der typische Weg um dieses Problem zu lösen, ist das Interface. Es kapselt, bzw. generalisiert also nun die Anforderungen des Treibstoffs. Klar ist auch: Treibstoff muss sich verbrauchen lassen. Um nun Benzin und Strom zu konkretisieren muss dieses Interface von beiden implementiert werden. In der Folge ist es also möglich nun verschiedene Autos mit dementsprechend anderen Treibstoffarten zu erstellen. Die Vorteile, die sich daraus ergeben, dadurch dass der Treibstoff nun beliebig austauschbar ist, kann man zu Testzwecken auch einen sogenannten Testtreibstoff implementieren. Diesen würde man auch als Mockup bezeichnen. Außerdem ist die Kopplung weniger statisch dank des Interfaces. Trotz allem ist dieses Konstrukt noch immer nicht 100 Prozent ideal zu nutzen, denn es gibt immer noch eine Menge statische Bindungen. Diesen Problemen nimmt sich nun die Dependency Injection an. Wenn man nun also das eben gemachte Beispiel weiterverwendet und deutlich den Use Case erweitert, hat man das Problem, dass allein das Benzin relativ viele Bestandteile hat. Weil diese müssten jetzt immer explizit initialisiert werden und dem Benzin übergeben werden. Und die Menge an Anforderungen, die übergeben werden müssen, kann sich auch kontinuierlich steigern. Die Probleme, die sich nun also ergeben, ist das die Wartbarkeit des Codes extrem schwierig ist. Außerdem skaliert er relativ ungünstig, je nachdem, wie viele Bestandteile z. B. das Benzin hat. Und der wohl schlimmste Punkt ist, dass jeder Ort, der nun das Benzin oder auch das Auto nutzt, de facto das Objekt komplett bauen muss. Auch samt Abhängigkeiten. Dependency Injection oder auch der Begriff Injektion sorgen nun also dafür, dass die Abhängigkeiten in ein Objekt selbst injiziert werden, d. h. insofern deklariert ist, dass Benzin nun also Benzol, Ethanol oder Hexan braucht, wird automatisch die Erstellung von den Instanzen dieser Klassen übernommen und dem Benzin bereitgestellt. Wenn nun also das Auto Benzin braucht, könnte beispielsweise das Benzin automatisch erzeugt werden, was wiederum die Bestandteile automatisch erzeugt. Allein diese Kette von Erstellungs- prozessen, die normalerweise manuell wären, sind ein großer Vorteil der Dependency Injection. Die Dependency Injection kann also zur Bereitstellung bestimmte Orte betreffen. Das kann einerseits der Konstruktor sein, d. h. dass alle Abhängigkeiten für den Konstruktor erstellt werden. Das kann genauso gut ein Methodenaufruf sein so dass bestimmte Teile des Aufrufs automatisch besorgt werden. Und es kann genauso gut auch ein Feld aus der Klasse selbst sein, wofür die Dependency Injection nun also die konkreten Instanzen bereitstellt. In diesem Video sahen Sie, wie kompliziert es ist, ein Auto zu bauen und wie Dependency Injection zukünftig für Sie Ihre Autos bauen kann.

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!