Google Guice

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Google Guice
Entwickler Google Inc. (mehr)
Aktuelle Version 3.0[1]
(24. März 2011)
Aktuelle Vorabversion 4.0 Beta 4 [2]
(20. März 2014)
Betriebssystem plattformunabhängig
Programmier­sprache Java
Kategorie Dependency-Injection-Framework
Lizenz Apache-Lizenz
Deutschsprachig nein
github.com/google/guice

Google Guice ist ein Open-Source-Framework für Dependency Injection mit Java. Guice wurde von Google erstmals 2008 unter der Apache-Lizenz veröffentlicht. Als damals erstes Framework ermöglicht Guice Dependency Injection mittels Annotationen. 2008 gewann es den Jolt Award für das beste Framework.[3]

Dependency Injection (DI) und Inversion of Control (IoC)[Bearbeiten]

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 „hereingeben“ 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 wird. 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[Bearbeiten]

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[Bearbeiten]

Für die zu verwendenden Objekte kann festgelegt werden, wie lange die einmal erzeugten Objekte „gecached“ (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 vom diesem Typ existiert. Die Scopes können für die eigenen Zwecke erweitert werden.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatGoogle Guice Release Note 3.0. Abgerufen am 17. Oktober 2011.
  2. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatGuice 4.0 Beta Release. Abgerufen am 8. Juli 2014.
  3. 18th Annual Jolt Award winners