Google Guice

Google Guice i​st ein Open-Source-Framework für Dependency Injection m​it Java. Guice w​urde von Google erstmals 2008 u​nter der Apache-Lizenz veröffentlicht. Als damals erstes Framework ermöglicht Guice Dependency Injection mittels Annotationen. 2008 gewann e​s den Jolt Award für d​as beste Framework.[2]

Google Guice
Basisdaten
Entwickler Google Inc. (mehr)
Aktuelle Version 5.0.1[1]
(2. März 2021)
Betriebssystem plattformunabhängig
Programmiersprache Java
Kategorie Dependency-Injection-Framework
Lizenz Apache-Lizenz, Version 2.0, Apache-Lizenz
deutschsprachig nein
github.com/google/guice

Dependency Injection (DI) und Inversion of Control (IoC)

Inversion of Control ist ein Pattern in der Software-Entwicklung, bei dem Programme ihre Abhängigkeiten (d. h. Programmteile oder Komponenten, von denen sie selbst abhängen) nicht selbst erzeugen, sondern sich von außen „herein geben“ lassen. Dieses Prinzip ist grundsätzlich ohne Dependency Injection möglich, wird aber mit Dependency Injection wesentlich vereinfacht. Dependency Injection sieht dabei vor, dass die Komponenten nicht vom Nutzer selbst erzeugt werden, sondern über einen „Injector“ (so der Name in Google Guice) erzeugt werden. Dieser Injector kann für alle notwendigen „Unterkomponenten“ konkrete Objekte erzeugen und somit auch das angeforderte, oft komplexe Objekt bereitstellen. Hierfür werden für den Injector die zu verwendenden konkreten Klassen (z. B. für Interfaces) angegeben. In Google Guice wird dies über sog. Module durchgeführt.

Module in Google Guice

Module in Guice fassen die zu verwendenden Abhängigkeiten eines bestimmten „Themengebietes“ zusammen. Wie weit dieses „Thema“ gefasst wird, ist dem einzelnen Programmierer überlassen und kann von Software-Projekt zu Software-Projekt sehr stark variieren. Gemeinsam ist den Modulen, dass sie zu (oft abstrakten) Abhängigkeiten im Projekt konkrete, zu verwendende Klassen mappen bzw. „binden“. So kann z. B. festgelegt werden, dass an jeder Stelle, wo ein Typ vom Interface „MailSender“ verwendet wird, ein Objekt vom Typ „NetworkMailSender“ injiziert wird. Durch das zentrale Mapping der zu verwendenden Typen in den Modulen des Injectors können die tatsächlich verwendeten Objekte sehr einfach ausgetauscht werden. So können z. B. in Unit-Tests sehr einfach Mock-Objekte (z. B. MailSenderMock) für das Interface „MailSender“ gebunden werden, die die Funktion des Mail-Versendens simulieren und somit einfache, schnelle, unabhängige und stabile TestCases möglich machen.

Scopes

Für die zu verwendenden Objekte kann festgelegt werden, wie lange die einmal erzeugten Objekte „gecacht“ (d. h. wiederverwendet) werden sollen. Diese Angaben werden in Guice „Scope“ genannt. Die populärsten Scopes sind dabei der „Default-Scope“ (keine explizite Scope-Angabe), bei dem bei jeder Anforderung des Typs ein neues Objekt erzeugt wird, oder der „Singleton-Scope“, bei dem programmweit – gesteuert durch den Injector – nur ein Objekt von diesem Typ existiert. Die Scopes können für die eigenen Zwecke erweitert werden.

Siehe auch

Einzelnachweise

  1. Release 5.0.1. 2. März 2021 (abgerufen am 13. März 2021).
  2. 18th Annual Jolt Award winners
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.