2010-08-19 13 views
5

Pracowałem z GUice kilka miesięcy temu i teraz, kiedy do niego wracam, stwierdzam, że muszę ponownie przeczytać dokumentację Guice i przykłady, aby zrozumieć, co zrobiłem z moim kodem.Guice kontra AspectJ

Jednak kiedy patrzę na AspectJ, to wszystko jest zbyt intuicyjne. Jest to intuicyjne rozszerzenie języka Java. Czuję, że mogę już od razu usiąść i napisać kod AspectJ.

Dlatego jestem kuszony, aby porzucić moją pogoń za Guice i iść z AspectJ. Szczególnie fakt, że Spring generuje kod AspectJ.

Jakie cechy Guice znajdują się powyżej AspectJ, które powinny zniechęcić mnie do opuszczenia Guice?

Dlaczego Google nie porzuciłoby Guice i nie skorzystałoby z AspectJ?

Vice Versa, Jakie są cechy AspectJ, które zachęcałyby mnie do opuszczenia Guice, oprócz intuicyjności tego?

Jeśli mogę zadać pytanie "splatać" w tym pytaniu, co oznacza, że ​​język Java nie jest łączony z AspectJ lub zapewnia podobne "aspekty" w przyszłej wersji Java?

Uwaga: wywołać szczęśliwe delete-azillas, rozumiem to pytanie może być zbyt ogólne - ale gdybym wiedział, co dalej specyfika zapytać, to bym nawet nie trzeba pytać, ale tylko google/bing za co Wiem, że nie wiem. Jak widzisz, moja wiedza Guice tak bardzo się pogorszyła, że ​​nawet nie rozpoznaję własnego pisma.

+0

Zawsze miałem dokładnie to samo uczucie. Dlaczego niektóre struktury wtrysku zależności, jeśli mam AspectJ? –

Odpowiedz

19

Jak mówi Peter, Guice i AspectJ to zupełnie inne rzeczy. Guice dokonuje iniekcji zależności, oszczędzając wiele zapisów fabrycznych, jednocześnie wykonując kod elastyczny i łatwy do przetestowania oraz dodając użyteczne rzeczy, takie jak zakresy. Zdarza się również, że umożliwia on bardzo prosty i łatwy sposób wykonania AOP poprzez przechwycenie metody (z programową konfiguracją metod przechwytywania, a nie DSL). Jest to faktycznie tylko kolejny bonus, który zapewnia, a nie jego główny cel w ogóle.

Jeśli chodzi o to, dlaczego AspectJ nie jest połączony z Javą ... Nie wydaje mi się, żeby wielu ludzi tego pragnęło. AOP jest potężny, ale w niebezpieczny sposób. Choć z pewnością jest to dobre dla niektórych zastosowań i znacznie upraszcza kodowanie w tych przypadkach, jeśli nadużywane, mogłoby to znacznie utrudnić zrozumienie tego, co dzieje się w programie.

7

Według mnie AspectJ i Guice robią różne rzeczy.

Guice wstrzykuje zależności, a AspectJ zajmuje się zagadnieniami przekrojowymi.

Jeśli używasz sprężyny, to w rzeczywistości używasz Guice, ponieważ nakłada się zbyt wiele, a symbioza Spring/AspectJ jest przekonującym rozwiązaniem.

Ja osobiście lubię lepszą jakość w przypadku nie wiosennych projektów ze względu na mniejszą wagę.

2

Wiosna jest zbudowana na iniekcji zależności i programowaniu zorientowanym na aspekt.

Guice to silnik wtryskowy zależności.

AspectJ to silnik zorientowany na aspekt.

Widzisz różnicę? Guice i AspectJ miałyby charakter uzupełniający; Wiosna już ma obie.

Należy wspomnieć, że Spring obsługuje własne AOP oparte na przechwytywaniu, które nie wymaga manipulacji kodami bajtowymi oprócz AspectJ.

+4

Guice zawiera własną obsługę AOP: http://code.google.com/p/google-guice/wiki/AOP –

+0

Nie wiedziałem tego; Dziękuję Ci. Wygląda jak przechwytujący metodę Spring. Czy była to część oryginalnego Guice Boba Lee, czy została dodana po pierwszym wydaniu? – duffymo

+1

AbstractModule.bindInterceptor jest częścią Guice 1.0. –