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.[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
- Release 5.0.1. 2. März 2021 (abgerufen am 13. März 2021).
- 18th Annual Jolt Award winners