Einführung in Google Guice für JAVA
Hallo,
Heute werde ich darüber sprechen, wie man mit Google Guice für Dependency Injection in Java beginnt. Zuerst werde ich einige Konzepte über das Framework vorstellen, dann werden wir eine einfache Anwendung schreiben, um zu veranschaulichen.
Dependency Injection
Wie wir in diesem Beitrag besprochen haben, ist Dependency Injection (DI) eine Technik, um Abhängigkeiten für Clients bereitzustellen, anstatt diese explizit zu erhalten. DI ist im Grunde ein Weg, um ein allgemeineres Ziel namens Dependency Inversion Principle (DIP) zu erreichen, das besagt:
Anstatt von Implementierungen abhängig zu sein, ziehen Sie es vor, von Abstraktionen abhängig zu sein.
Wenn wir DI anwenden, brauchen wir eine Möglichkeit, die Abhängigkeiten für die Clients, die sie anfordern, zu injizieren (zu verdrahten, zu binden), wir könnten es manuell tun, wenn wir die Client-Klasse instanziieren, oder wir könnten uns auf ein Framework verlassen, um diese Aufgaben zu automatisieren und auch einige interessante Funktionen wie das Lebenszyklusmanagement hinzuzufügen.
In Bezug auf Java gibt es eine Vielzahl von Frameworks mit möglichen Vor- und Nachteilen, zum Beispiel Weld , Spring, Guice usw.
In diesem Beitrag werden wir Guice verwenden und in einem zukünftigen Beitrag werde ich über Spring sprechen, wahrscheinlich im Zusammenhang mit dem Entwerfen von RESTful-APIs mit Spring Boot und Spring REST.
Google Guice
Google Guice ist ein Framework zur Automatisierung der Abhängigkeitsinjektion, indem ein Container bereitgestellt wird, in dem Abstraktionen und Implementierungen zugeordnet werden können. Nach dem Mapping werden die Abhängigkeiten bei Bedarf automatisch in Clients eingefügt.
Das Mapping in Guice wird durch die Implementierung von com erreicht.Google.injizieren.Modul, das normalerweise durch Erben von der abstrakten Basisklasse com erfolgt.Google.injizieren.AbstractModule.
Danach müssen wir die configure-Methode überschreiben und uns auf eine fließende API verlassen, indem wir bind- und to-Methoden aufrufen, um die Zuordnung zwischen der Abstraktion (Parameter von bind) und der Implementierung (Parameter von to) zu definieren.
Dann können wir die Abhängigkeiten injizieren, indem wir Ihre Abhängigkeiten mit com annotieren.Google.injizieren.Injizieren.
Schließlich müssen wir eine com erhalten.Google.injizieren.Injektor aus unserem zuvor definierten Modul, sodass wir den Client jetzt mit der getInstance-Methode abrufen können und seine Abhängigkeiten automatisch injiziert werden.
Example
Dieses Beispiel besteht aus einem Teil eines Java-Systems, das Protokollinformationen über seinen Betrieb sendet. Um die Aufnahme von Guice in unser Projekt zu vereinfachen, werden wir Maven als Build-Tool verwenden.
Im pom.xml, fügen Sie das folgende Artefakt für Guice in Version 4.0 im Abschnitt Abhängigkeiten hinzu:
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version></version>
</Abhängigkeit>
Erstellen wir die Schnittstelle LogSender um das Verhalten darzustellen: „sendet das Protokoll an ein Medium“:
Dieser Dienst wird von einer Klasse verwendet, die einen Verweis auf LogSender hat, und die Injektion erfolgt durch ihren Konstruktor, der mit @Inject:
Die Implementierung StdoutLogSender sendet das Protokoll an den Standardausgabestream, in diesem Fall an die Konsole:
Jetzt haben wir die wir müssen Guice mitteilen, wie LogSender StdoutLogSender zugeordnet wird, und zwar mit der LoggingModule-Klasse:
Schließlich können wir in der Hauptklassenanwendung einen Injektor erstellen und unser LoggingModule an seinen Konstruktor übergeben. Dann können wir eine Instanz von Exchanger erhalten, deren Abhängigkeit von LogSender gebunden ist:
Fazit
In diesem Artikel haben wir die Grundlagen für den Einstieg in Google Guice zur Automatisierung von Abhängigkeitsinjektionsaufgaben in Java-Anwendungen erläutert. Wir haben eine einfache Anwendung geschrieben, um zu veranschaulichen, wie die Zuordnung zwischen Abstraktionen und Implementierungen definiert und in unsere Clients eingefügt werden kann.
Ich hoffe, dass Sie mit diesem grundlegenden Überblick über Guice Ihre Studien zur Abhängigkeitsinjektion und zur Entwicklung von Code mit geringerer Kopplung und hohem Zusammenhalt fortsetzen können.