2010-08-19 14 views
5

Ich habe vor einigen Monaten mit GUICE gearbeitet und jetzt, wenn ich darauf zurückkomme, muss ich die Guice-Dokumentation und Beispiele noch einmal lesen, um zu verstehen, was ich mit meinem Code gemacht habe.Guice vs AspectJ

Wenn ich jedoch auf AspectJ schaue, ist es alles zu intuitiv. Es ist eine intuitive Erweiterung der Java-Sprache. Ich fühle, dass ich mich sofort setzen und den AspectJ-Code schreiben kann.

Deshalb bin ich versucht, meine Verfolgung von Guice aufzugeben und mit AspectJ zu gehen. Besonders die Tatsache, dass Spring den AspectJ-Code generiert.

Welche Eigenschaften von Guice gibt es über AspectJ, die mich davon abhalten sollten, Guice aufzugeben?

Warum würde Google Guice nicht verlassen und stattdessen AspectJ verwenden?

Vice Versa, Was sind die Merkmale von AspectJ, die mich dazu ermutigen würden, Guice zu verlassen, abgesehen von der Intuitivität?

Wenn ich hier in einer Frage "weben" darf, was verhindert, dass Java mit AspectJ verschmolzen wird oder ähnliche "Aspekte" in einer zukünftigen Java-Version bereitstellt?

Hinweis: zu glücklich löschen-azillas auslösen, merke ich, diese Frage zu allgemein sein kann - aber wenn ich weiß, was weitere Einzelheiten zu fragen, dann würde ich nicht einmal fragen müssen, sondern nur google/bing für das, was Ich weiß, dass ich es nicht weiß. Wie du sehen kannst, hat sich mein Guice-Wissen so stark verschlechtert, dass ich meine eigene Handschrift nicht einmal mehr erkenne.

+0

Ich habe immer genau das gleiche Gefühl. Warum ein Framework zur Abhängigkeitsinjektion, wenn ich AspectJ habe? –

Antwort

19

Wie Peter sagt, sind Guice und AspectJ völlig unterschiedliche Dinge. Guice macht Abhängigkeitsinjektionen, spart viel Fabrikschrift, macht Code flexibel und einfach zu testen und fügt nützliche Dinge wie Bereiche hinzu. Es ermöglicht auch eine sehr einfache und einfache Möglichkeit, AOP über Methodenabfang zu machen (mit programmatischer Konfiguration, welche Methoden abgefangen werden, anstatt einer DSL). Dies ist effektiv nur ein weiterer Bonus, den es bietet und nicht sein Kernziel überhaupt.

Soweit AspectJ nicht in Java integriert ist ... Ich habe nicht das Gefühl, dass viele Leute das wollen. AOP ist mächtig, aber auf eine gefährliche Art und Weise. Während es in einigen Fällen sehr nützlich für einige Anwendungen ist und den Code sehr vereinfacht, kann es bei zu langer Verwendung viel schwieriger sein zu verstehen, was in einem Programm passiert.

7

Nach meiner Meinung machen AspectJ und Guice verschiedene Dinge.

Guice injects Abhängigkeiten und AspectJ befasst sich mit Crosscutting Bedenken.

Wenn Sie Spring verwenden, dann ist Guice in der Tat weniger wert, da es zu viele Überlappungen gibt und dann ist die Symbiose von Spring/AspectJ eine überzeugende Lösung.

Ich persönlich mag guice besser für Nicht-Frühling-Projekte wegen seiner geringeren Gewicht.

2

Spring basiert auf Abhängigkeitsinjektion und aspektorientierter Programmierung.

Guice ist eine Abhängigkeitseinspritzung.

AspectJ ist eine aspektorientierte Engine.

Den Unterschied sehen? Guice und AspectJ würden sich ergänzen; Der Frühling hat schon beides.

Es sollte erwähnt werden, dass Spring sein eigenes Interzeptor-basiertes AOP unterstützt, das neben AspectJ keine Byte-Code-Manipulation erfordert.

+4

Guice enthält eine eigene AOP-Unterstützung: http://code.google.com/p/google-guice/wiki/AOP –

+0

Wusste das nicht; Danke. Sieht aus wie Spring's Abfangjäger. War es Teil von Bob Lees Original Guice oder wurde nach der ersten Veröffentlichung hinzugefügt? – duffymo

+1

AbstractModule.bindInterceptor ist Teil von Guice 1.0. –