Continuando la serie de posts relativos a la programación orientada a aspectos y, concretamente, el lenguaje AspectJ, durante esta entrada analizaremos la implementación que este último hace de los pointcuts.
AspectJ ofrece dos mecanismos diferentes que permiten a los pointcuts realizar la selección de los joint points:
- Kinded pointcuts. En este caso, los pointcuts seleccionan categorías de joint points (de ahí su nombre). Así, por ejemplo, se ofrece la posibilidad de realizar matching sobre la ejecución de un método.
- Non-kinded pointcuts. Se seleccionan los joint point en base a la información de la que disponen, como los tipos en tiempo de ejecución o su contexto. En esta situación se seleccionan joint points de cualquier clase, siempre y cuando satisfagan la condición descrita.
A continuación analizaremos los kinded pointcuts y dejaremos para la siguiente entrada la segunda categoría.
- Kinded Pointcuts
Categoría de Joint Point | Sintaxis del pointcut |
---|---|
Ejecución de un método | execution(MethodSignature) |
Llamada a un método | call(MethodSignature) |
Ejecución de un constructor | execution(ConstructorSignature) |
Llamada a un constructor | call(ConstructorSignature) |
Inicialización de una clase | staticinitializaction(TypeSignature) |
Acceso de lectura a un campo | get(FieldSignature) |
Acceso de escritura a un campo | set(FieldSignature) |
Ejecución de un manejador de excepciones | handler(TypeSignature) |
Inicialización de un objeto | initialization(ConstructorSignature) |
Pre-inicialización de un objeto | preinitialization(ConstructorSignature) |
Ejecución de un advice | adviceexecution() |
Por ejemplo, si deseamos seleccionar todas las llamadas a los métodos públicos commit() de la clase TransactionManager, escribiríamos un pointcut similar al siguiente:
call(public void TransactionManager.commit(..))
En la siguiente entrada analizaremos en detalle la segunda categoría de pointcuts ofrecida por AspectJ
No hay comentarios:
Publicar un comentario