Google Guice: Framework für Dependency Injection

Seite 4: Performance

Inhaltsverzeichnis

Seine Performance-Vorteile gegenüber Spring spielt Guice sowohl beim Start der Anwendung als auch zur Laufzeit aus, wenn es um das Erzeugen der angeforderten Objekte geht. Den Vorsprung bei der Anlage der Objekte erzielt Guice durch die Java-5-Fähigkeiten zur Nebenläufigkeit. (Das dürfte sich mit Spring 3 allerdings ändern, das vollständig auf Java 5 basieren wird.) Außerdem verzichtet es auf das Erzeugen der Proxy-Objekte, die Spring einsetzt. Wie relevant das in der Praxis ist, hängt jedoch vom Charakter der Applikation ab.

Neben den technischen Eigenschaften sowie dem Funktionsumfang zählen bei der Wahl eines Werkzeugs Aspekte wie seine Komplexität. Google sieht Guice in Bezug auf Einfachheit, Übersichtlichkeit, Wartbarkeit, Erlernbarkeit und Performance gegenüber Spring klar im Vorteil.

Insgesamt haben die zahlreichen Vergleiche der beiden Frameworks in den entsprechenden Kreisen Aufregung erzeugt. Letztlich läuft es jedoch nicht auf eine Entwederoder- Entscheidung hinaus, da zwar beide DI-Container sind, jedoch einen unterschiedlichem Fokus setzen: Guice hinterlässt einen kleinen "Footprint", während sich Spring als umfassende und mächtige Lösung anbietet. Ein Gutteil ihrer XML-Komplexität resultiert zudem aus Funktionen außerhalb von DI. Da Guice diese Bereiche nicht abdeckt, entsteht keine echte Rivalität. Die Koexistenz beider Frameworks ist denkbar, denn Guice erlaubt das Einbinden von Spring Beans.

Der Plan für Guice 2 – geplant für Januar 2009 – enthält eine ganze Reihe von Erweiterungen, unter anderem Construction Listener und eine Introspection API. Die Listener bieten Einstiegspunkte bei der Objekterzeugung zum Einhaken eigener Logik. Die API-Erweiterung soll Interna des Injector-Objekts offenlegen und vollständigen Zugang zum Abhängigkeitsgraphen erlauben. Das würde beispielsweise Visualisierungswerkzeugen einen Ansatzpunkt bieten. Ferner nennt die Roadmap Provider-Methoden, mit denen sich Modulklassen einfacher gestalten lassen sollen. Custom Provider könnten damit ein flexibleres Binding durchführen, das zum Beispiel nur in einem bestimmten Scope wirksam wird.