2010-11-30 14 views
30

Primero déjenme señalar, que uso AspectJ y me gusta, pero qué más puedo hacer con él.¿Para qué es AspectJ?

Sé que AspectJ puede ser/es usado para registrar. En algunos casos, se utiliza para el control de transacciones, que se implementa principalmente junto con anotaciones. AspectJ también se puede utilizar para mejorar las clases con métodos (generados por código), como lo hace Spring Roo.

Pero creo que AspectJ y AOP en general, se pueden usar para más de: registro, control de transacciones y clases parciales de simulación.

¿Cuáles son otros casos de uso útiles para AspectJ y AOP?

+2

Deberías leer AspectJ en acción por Ramnivas Laddad http://www.manning.com/laddad2 El TOC te dará una idea: http://www.manning.com/laddad2/excerpt_contents.html –

+2

@George Stocker: la pregunta tiene 14 votos positivos, 0 votos a favor, 3 respuestas con un total de 21 votos a favor, y lo pones en suspenso después de 4 años - realmente ? El punto es que esta pregunta tiene buenas respuestas, por lo que realmente no tiene este problema "demasiado amplio". – Ralph

+0

Si desea debatir el cierre, siéntase libre de mencionarlo en meta. Cerrar como demasiado amplio es independiente de los votos, puntos de vista o respuestas actuales. Tiene que ver con el alcance de la pregunta. –

Respuesta

26
  • comprobación de permisos
  • acción de interrupción que lleva demasiado tiempo
  • acción de ejecución en hilo separado o incluso en el contexto de diferentes procesos o evento en otra máquina
  • monitoreo
  • la preparación de cualquier datos/medio ambiente antes resultados de llamada y procesamiento después de la llamada
  • recursos de apertura/cierre

EDITAR

Aunque pasaron muchos años desde que di esta respuesta, decidí agregar lo siguiente para que la respuesta sea más completa.

  • comprobación de seguridad.
  • correcciones de API incorrectas o del comportamiento que no puede cambiar. Por ejemplo, el método booleano que devuelve false en algunas condiciones pero debe devolver true. Puedes arreglar esto usando AspectJ.
+1

El almacenamiento en memoria caché es otro uso – ex0b1t

+0

Gracias, @ ex0b1t. Cualquier lista nunca estará llena. – AlexR

16

El Wikipedia entry le da algunos ejemplos más (pero no tantos). Por lo general, la Programación Orientada a Aspectos debe usarse solo para implementar comportamientos simples que no son parte del interés central de una clase y que son comunes a diferentes clases. Tan pronto como empiezas a poner demasiada lógica en tus aspectos, el código se vuelve realmente ilegible.

El aspecto que sugiere (registro, transacción, ...) es el aspecto más utilizado. Yo agregaría seguridad también.

2

Se puede usar AspectJ para aplicar algunas reglas (de diseño).

  • como cualquier método de control necesitan algunas anotaciones especiales
  • todos los/frontend/clase dto servicio debe estar ubicado en un thepacakge servicio/Fronten/dto
  • más madura piensa como: checking that setters do not have any logic.

Inyectar Mocks en las clases que de otro modo crear nuevas instancias mediante el uso de nueva. Suponga que tiene este código:

public void sendInvitationEmail(String address) { 
    InvitationEmail email = new InvitationEmail(); 
    email.sendTo(address).send(); 
} 

Y necesita reemplazar email por un simulacro. Entonces podría usar un Aspecto (@Pointcut("call(InvitationEmail.new(..))") ) para "inyectar" un simulacro. - @Ver Blog JMock and AspectJ por Daniel Roop, así como Spring Roo`s @MockStaticEntityMethods (Mock Static Methods using Spring Aspect)