Peluch
Rubby Casallas Grupo de Construcción de Software Universidad de los Andes
1
Referencias
http://eclipse.org/aspectj/ http://www.theserverside.com/events/video s/GregorKiczalesText/interview.jsp http://www.onjava.com/pub/a/onjava/2004/ 01/14/aop.html http://www.onjava.com/pub/a/onjava/2004/ 08/25/aoa.html
2
1
Agenda
Motivación Conceptos BásicosEl lenguaje AspectJ:
Pointcuts Advices Aspects Introductions
Ejemplos
3
Motivación
Ejemplo:
Se necesita saber cuanto tiempo se demora la ejecución de algunos métodos de una aplicación
4
2
Motivación
public class BankAccount { public void withdraw (double amount) { long startTime = System.currentTimeMillis(); try { // Actual method body... } finally { long endTime =System.currentTimeMillis() – startTime; System.out.println("withdraw took: " + endTime); } } }
5
Motivación
Código similar en cada clase y cada método donde se quiera hacer la medición Si se necesitara un cambio en ese código tocaría cambiar en todas las clases donde está No se puede decir apagar o prender la ejecución de ese código
6
3
Motivación
Código similar en cada clase y cada métododonde se quiera hacer la medición Si se necesitara un cambio en ese código tocaría cambiar en todas las clases donde está No se puede decir apagar o prender la ejecución de ese código
El anterior es un ejemplo de un aspecto transversal a la aplicación. Es transversal porque la misma lógica se debe escribir en 7 varias partes de la aplicación.
Conceptos Básicos
Un aspecto es una preocupacióncomún a varias clases de una aplicación El aspecto es “casi siempre” ortogonal a lo que la clase representa Por ejemplo:
Logger, requerimientos no funcionales, testing y validación de contratos, etc.
8
4
Conceptos Básicos
Un aspecto es una unidad funcional que permite expresar una estructura de código en diferentes partes de un programa Un aspecto está compuesto de dos partes:
elpunto de corte (point cut) que indica en qué partes del código se va a introducir un código definido el código del aspecto que típicamente se llama un advice
9
Conceptos Básicos
Curso Profesor
0..*
0..* T ema
0.. *
Mat erial
0..*
0..*
0..*
0..*
0..*
0..*
10
5
Conceptos Básicos
Problema:
Incluir instrucciones en todos los métodos de todas las clases parahacer un logger! Al comienzo de la ejecución de cada método:
logger.info("Entering: " + );
11
Conceptos Básicos
Curso Profesor
0..*
0..* T ema
0.. *
Mat erial
0..*
0..*
0..*
0..*
0..*
0..*
12
6
Conceptos Básicos
Curso Profesor
0..*
0..* Tem a
0..*
M aterial
0..*
aspecto logger Operador “entretejer” (weaving) )
0..*
0..*
0..*0..*
0..*
13
Ejemplo: AspectJ
aspect simpleLogger { pointcut tracedCall(): call(public * *(..));
aspecto logger
before(): tracedCall() { logger.info("Entering: " + thisJoinPoint); } }
14
7
Ejemplo: AspectJ
aspect simpleLogger { pointcut tracedCall(): call(public * *(..)); before(): tracedCall() { logger.info("Entering: " + thisJoinPoint); } } Puntos de la ejecución delprograma
15
Ejemplo: AspectJ
aspect simpleLogger { pointcut tracedCall(): call(public * *(..)); before(): tracedCall() { logger.info("Entering: " + thisJoinPoint); } } La instrucción del logger se va a ejecutar justo antes de alcanzar el punto tracedCall
16
8
Ejemplo: JBoss AOP
public class Metrics { public Object profile (MethodInvocation invocation) throws Throwable { longstartTime = System.currentTimeMillis(); try { return invocation.invokeNext(); } finally { long endTime = System.currentTimeMillis() - startTime; java.lang.reflect.Method m = invocation.getMethod(); System.out.println("method " + m.toString() + " time: " + endTime + "ms"); } } }
17
Ejemplo: JBoss AOP
jboss-aop.xml
18
9
Agenda
Conceptos Básicos El lenguaje AspectJ:
Join point...
Regístrate para leer el documento completo.