Google Guice: Framework für Dependency Injection

Werkzeuge  –  Kommentare

Google Earth und Maps sind Beispiele für die Innovationsfreude des Suchmaschinengiganten. Weitere Projekte haben sich in Googles hausinterner Entwicklung bewährt. Ein junger Spross dieser Familie ist das Open-Source-Framework Guice, eine schlanke Alternative zu Spring.

Google Guice, ein Open-Source-Framework für die Dependency Injection (DI), entstand während des Ausbaus der Internet-Werbeanwendung AdWords und sollte dort Probleme bei der Team-Skalierung beheben, die in Projekten mit mehreren Hundert Entwicklern auftreten. Trotz anerkannter DI-Frameworks wie dem populären Spring [1] wollte Google eine eigene, besonders leichtgewichtige Variante für die interne Softwareentwicklung einsetzen (siehe "Lose Beziehung").

Generics und Annotations aus Java 5 sind wesentlicher Bestandteil des Framework [2]. Zudem unterstützt Guice eigene Scopes (siehe Glossar), aspektorientierte Programmierung (AOP) sowie die Spring-Integration. Die Fähigkeit zum Injizieren statischer Attribute sowie das Management zirkulärer Referenzen runden das Bild ab.

Der Planer greift über ein Booking- Interface auf die konkreten Klassen HotelBooking und MockBooking zu (Abb. 1).

Als Beispiel dient hier eine Anwendung zur Urlaubsplanung, die Hotels bucht (Abbildung 1). Das Planer-Objekt (Aufrufer) spricht ein Interface Booking an, hinter dem sich konkrete Implementierungen (Zielobjekte) verbergen. Um während des Entwickelns nicht fortwährend das echte Zielsystem abfragen zu müssen, kommt hier ein sogenanntes Mock-Objekt (Dummy) zum Einsatz. Für den Produktivbetrieb soll der Entwickler einfach umschalten können.

Das Framework soll besonders schlank wirken und den "Boilerplate Code" massiv reduzieren. Statt Fleißarbeit zu leisten, soll sich der Entwickler mit dem Wesentlichen beschäftigen. Dazu konzentriert sich Guice ausschließlich auf eine performante Umsetzung der DI und ist entsprechend abgespeckt, sowohl was die Größe der JAR-Files als auch den Speicherverbrauch angeht. Die Abhängigkeiten verwaltet Guice nicht in zentralen XML-Dateien, sondern hinterlegt sie im Java-Code.