Investition der Kontrolle und Einspeisung von Abhängigkeiten in Java / Spring

Dies ist der vierte Teil einer Reihe von Tutorials, die sich mit den grundlegenden Themen der Java-Sprache befassen, um den Leser auf die Verwendung des Spring Framework vorzubereiten. Der erste Teil dieser Reihe von Tutorials kann hier bezogen werden , der zweite Teil kann hier und der dritte Teil hier bezogen werden . In diesem Tutorial werden wir zwei grundlegende Konzepte sehen, die wir behandeln müssen, wenn wir Spring korrekt verwenden möchten: Inversion von Control und Injection von Abhängigkeiten.

Zunächst möchte ich klarstellen, dass diese Konzepte von Martin Fowler in diesem Artikel viel besser erklärt und auf dieser Seite ins Spanische übersetzt werden. Ich möchte jedoch versuchen, das Konzept so zusammenzufassen, dass es leicht verständlich ist, und Ihnen das Lesen des Artikels ersparen (obwohl Sie es sind) Wir laden Sie herzlich ein, es zu lesen, wenn Sie weitere Fragen haben.

Investition kontrollieren

Der Begriff ist relativ neu, aber es handelt sich um ein Programmiermuster, das auf Programme zurückgeht, die mit reiner sequentieller Programmierung erstellt wurden, bei der sich ein einzelner Programmierer (oder eine Gruppe von Programmierern) zusammensetzte, um eine Reihe von Schritten oder Rechenanweisungen zu schreiben, die in perfekter Reihenfolge ausgeführt werden sollen von Anfang bis Ende mit der Absicht, ein Endergebnis zu erzielen.

Zu dieser Zeit (ich glaube nicht, dass es viele Jahre her ist) kamen die Aufrufe der Methoden und Buchhandlungen immer von einer zentralen Quelle, die für die Manipulation aller Variablen im selben Programm zuständig war. Anschließend wurden grafische Oberflächen entwickelt, die für die Verwaltung der Dateneingaben in das Programm verantwortlich waren, während der Hauptablauf des Programms für die Bereitstellung von Handlern der Ereignisse in der grafischen Oberfläche verantwortlich war (aktiviert beim Klicken und Drücken etwas) diese Taste, wenn die Maus bewegt wird usw.), während sich die Benutzeroberfläche in einem konstanten Zyklus befindet. Auf diese Weise wird die Steuerung des Programms umgekehrt, und die grafische Oberfläche ist dafür verantwortlich, den Hauptablauf darüber zu informieren, was zu tun ist und wie, ohne genau zu wissen, wie es getan wird.

See also  So erstellen Sie Makros in Microsoft Word 2016, 2013

Wenn Sie bemerken, können Sie mithilfe der Schnittstellen in Java die Steuerung einer Anwendung auf externe Agenten übertragen. Das Konzept ist jedoch auf Daemon-Threads anwendbar, die darauf warten, dass ein Ereignis aktiviert wird, eine Klasse, die für die Instanziierung und Bereitstellung von Implementierungen anderer Klassen verantwortlich ist an das Programm (Werksmuster) und im Wesentlichen an jedes Muster, das die Übertragung der Steuerung des Programms an einen externen Agenten ermöglicht.

Einfügung von Abhängigkeiten

Hierbei handelt es sich um eine bestimmte Art der Steuerumkehr, bei der eine Klasse A nicht weiß, welches Objekt zum Zeitpunkt der Kompilierung verwendet werden soll, sondern nur weiß, welche Aktionen sie mit diesem Objekt ausführen muss. Nehmen wir die folgende Klasse an (die auf den in meinem vorherigen Tutorial erstellten Klassen basiert):

 public class Dibujante { öffentlicher Platz Platz; public Dibujante () { Quadrat = neues Quadrat (); } öffentliche Leere DibujoMaestro () { square.draw (); } } 

Wie Sie sehen, hängt diese “Cartoonist” -Klasse vollständig von der “Square” -Klasse ab, da sie für den Lebenszyklus des quadratischen Objekts verantwortlich ist, das sie später verwenden wird. Diese Art, eine Klasse “Dibujante” zu erstellen, ist sehr unpraktisch, da wir später den Basiscode ändern müssten, um Rechtecke oder Dreiecke zu zeichnen.

Stattdessen können wir eine wiederverwendbarere Klasse erstellen, wenn wir die Schnittstelle “Drawable” implementieren, die wir im vorherigen Lernprogramm erstellt haben:

 public class Dibujante { öffentliche Zeichnungserstellung; öffentliche Dibujante (Dibujable d) { Zeichnen = d; } öffentliche Leere DibujoMaestro () { drawing.draw (); } } 

Auf diese Weise “steuern” die Objekte der Klasse “Zeichnen” nicht das zu zeichnende Objekt, sondern wissen nur, dass sie die Entwurfsschnittstelle und später diese “Zeichner” -Objekte implementieren, die in meiner Anwendung erstellt werden oder die von einer anderen Person erstellt werden zur Verwendung in einer Anwendung, die auf meine Objektbibliothek zugreift, sind perfekt in der Lage, jedes Objekt zu empfangen, das die Schnittstelle “Drawable” implementiert.

See also  Suchen und Anzeigen gespeicherter Kennwörter Windows 10, 8, 7

Im vorherigen Beispiel wird die so genannte “Konstruktorinjektion” angewendet, da die Abhängigkeit auf der Konstruktorebene injiziert wird. Sie können die Abhängigkeit jedoch auch über die “Setter” injizieren oder in anderen Programmiersprachen die Parameter oder Schnittstellen (In Java können Sie keine Parameter oder Schnittstellen ändern, die eine Methode zur Laufzeit akzeptiert, in Python können jedoch beispielsweise Methoden Parameter akzeptieren, ohne den Parametertyp anzugeben.)

 public class Dibujante { öffentliche Zeichnungserstellung; public void setDraw (Drawn d) { Zeichnen = d; } öffentliche Leere DibujoMaestro () { drawing.draw (); } } 

Das Einfügen von Abhängigkeiten ermöglicht im Wesentlichen eine Trennung der Funktionalitäten Ihres Programms. Diese Unabhängigkeit ermöglicht es Ihnen, Ihre Klassen zu testen, ohne (die Wiederholung wert), dass Ihre Klasse an nichts gebunden ist. Diese Unabhängigkeit ist eines der Schlüsselelemente für Spring . Die Komponenten hängen vom Framework und nicht von der Anwendung ab. Sie können Objekte erstellen, die außerhalb Ihrer Anwendung existieren, und sie nur dann verwenden, wenn Sie sie benötigen.

Bereits ab dem nächsten Tutorial werden wir direkt mit Spring zusammenarbeiten und Sie werden sehen, wie sich alle bisher gesehenen Konzepte auf ihre Funktionsweise auswirken, und Sie können sich in kurzer Zeit das erforderliche Fachwissen aneignen.

Ich warte auf Ihre Kommentare, bis zum nächsten!

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *