2010-08-19 20 views
5

Estuve trabajando con GUice hace algunos meses y ahora cuando vuelvo a él, me parece que tengo que volver a leer la documentación y los ejemplos de Guice para comprender lo que hice con mi código.Guice vs AspectJ

Sin embargo, cuando miro en AspectJ es demasiado intuitivo. Es una extensión intuitiva del lenguaje Java. Siento que puedo sentarme y escribir el código AspectJ inmediatamente.

Por lo tanto, estoy tentado de abandonar mi búsqueda de Guice e ir con AspectJ. Especialmente el hecho de que Spring está generando el código AspectJ.

¿Qué características de Guice están ahí arriba AspectJ que debería desalentarme de abandonar Guice?

¿Por qué Google no abandonaría Guice y usaría AspectJ en su lugar?

Viceversa, ¿Cuáles son las características de AspectJ que me animarían a abandonar Guice, además de la intuición de la misma?

Si se me permite "entretejer" en una pregunta aquí, ¿qué impide que el lenguaje Java se fusione con AspectJ o proporcione "aspectos" similares en una versión futura de Java?

Nota: de gatillo fácil delete-azillas, realizo esta pregunta puede ser demasiado general - pero si sabía qué detalles más preguntar, entonces yo ni siquiera necesidad de preguntar, pero sólo Google/Bing para lo Sé que no sé. Como puede ver, mi conocimiento de Guice se ha degradado tanto que ni siquiera reconozco mi propia escritura.

+0

Siempre he tenido exactamente la misma sensación. ¿Por qué un framework de inyección de dependencia si tengo AspectJ? –

Respuesta

19

Como dice Peter, Guice y AspectJ son cosas totalmente diferentes. Guice realiza la inyección de dependencia, lo que ahorra mucha escritura en la fábrica al tiempo que hace que el código sea flexible y fácil de probar y agrega cosas útiles como los ámbitos. También permite una manera muy simple y fácil de hacer AOP mediante la interceptación del método (con la configuración programática de los métodos interceptados, en lugar de DSL). Esto es solo otra bonificación que proporciona y no su objetivo principal en absoluto.

En cuanto a por qué AspectJ no se ha fusionado en Java ... No creo que mucha gente quiera que eso suceda. AOP es poderoso, pero de una manera peligrosa. Si bien es cierto que es ideal para algunos usos y simplifica mucho el código en esos casos, si se usa en exceso podría hacer que sea mucho más difícil comprender lo que sucede en un programa.

7

Según yo, AspectJ y Guice hacen cosas diferentes.

Guice inyecta dependencias y AspectJ se ocupa de cuestiones transversales.

Si utiliza la primavera, de hecho, hay menos valor en el uso de Guice ya que hay demasiada superposición y entonces la simbiosis de Spring/AspectJ es una solución convincente.

Personalmente me gusta guice mejor para proyectos que no son de primavera debido a su peso más liviano.

2

Spring se basa en la inyección de dependencia y la programación orientada a aspectos.

Guice es un motor de inyección de dependencias.

AspectJ es un motor orientado a aspectos.

Ver la diferencia? Guice y AspectJ serían complementarios; Spring ya tiene ambos.

Cabe mencionar que Spring admite su propio AOP basado en interceptor, que no requiere manipulación de código de bytes, además de AspectJ.

+4

Guice incluye su propio soporte AOP: http://code.google.com/p/google-guice/wiki/AOP –

+0

No lo sabía; gracias. Parece el interceptor de método de Spring. ¿Fue parte del Guice original de Bob Lee o se agregó después del primer lanzamiento? – duffymo

+1

AbstractModule.bindInterceptor es parte de Guice 1.0. –