Hace tiempo habíamos hablado acerca del modelo de joint point ofrecido por AspectJ, concretamente en estas dos entradas: Joint Point I y Joint Point II.
En los dos posts anteriores indicabamos que un join point no es más que un punto de ejecución en un sistema. Así por ejemplo, el acceso al campo de una clase, la ejecución de una función o una sentencia for son ejemplos de join points. AspectJ solamente expone un subconjunto de todos los posibles joint points, limitando de este modo, el acceso a las construcciones más estables.
Los pointcuts son construcciones que nos permite seleccionar joint points y recuperar su contexto. Veamos algunas de las características principales:
- Los pointcuts especifican un criterio de selección. Utilizaremos tipos, campos, métodos, anotaciones, etc para generar dichas definiciones. También podremos establecer condiciones en tiempo de ejecución que tendrán que cumplirse en el joint point seleccionado.
- Los joint point disponen de información en tiempo de ejecución. Determinados pointcuts pueden recolectar dicha información y pasársela al advice. Por ejemplo, la llamada a un método de un objeto tendrá disponible el propio objeto que realiza la llamada y los argumentos que se están pasando.
- En el caso del lenguaje Java, todos los elementos que componen un programa tienen una signatura. La utilización de patrones para dichas signaturas permiten a los pointcuts especificar las reglas de selección de los joint point que se desean capturar.
Categoría | Joint Point Expuesto | Código que representa |
---|---|---|
Método | Execution | Cuerpo del método |
Método | Call | Invocación del método |
Constructor | Execution | Ejecución de la lógica de creación de un objeto |
Constructor | Call | Invocación de la lógica de creación de un objeto |
Acceso a un campo | Read | Lectura de un objeto o el campo de una clase |
Acceso a un campo | Write | Escritura de un objeto o el campo de una clase |
Proceso de excepciones | Handler | Bloque catch para manejar una excepción |
Inicialización | Class init | Proceso de carga de una clase (class loading) |
Inicialización | Object init | Inicialización de un objeto en un constructor |
Inicialización | Object pre-init | Pre-inicialización de un objeto en un constructor |
Advice | Execution | Ejecución de un advice |
En la siguiente entrada (espero que sea lo más pronto posible :) ) analizaremos en detalle la estructura sintáctica de los pointcuts, haciendo especial hincapié en las signaturas.
Hasta pronto!
PD: Últimamente mi tiempo escasea (por llamarlo de alguna manera) pero eso dará para una nueva entrada.
No hay comentarios:
Publicar un comentario