programacion orientada a aspectos con...
Post on 16-Sep-2020
5 Views
Preview:
TRANSCRIPT
IntroduccionAOP
AspectJAplicacion de los aspectos
Programacion Orientada a Aspectos con AspectJ
Cursillos Julio 2007Universidad de Deusto
27 de julio de 2007
Xabier Laiseca Mansoe-ghost (http://e-ghost.deusto.es)
MoreLab (http://www.morelab.deusto.es)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
Situacion actual
Situacion actual
Metodologıa mas utilizada es la OOP
Permite disenar jerarquıas de objetosVentaja: Facilita el desarrollo de servicios verticalesProblema: Acceso a los servicios horizontales
Dispersion de codigo: Llamadas a distinta funcionalidadrepartidas y repetidas a lo largo de todo nuestro codigo.Por ejemplo: autenticacion y autorizacion, logging, etc.
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
Situacion actual
Solucion
Programacion orientada a aspectos (AOP)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionImplementaciones
Introduccion a la AOP
Definicion: Paradigma de programacion que persigue lamodularizacion fomentando la separacion de conceptos, enespecial los que afectan a otros conceptos de la aplicacion.
Estilo de programacionFactoriza conceptos comunes de la aplicacion (crosscuttingconcerns). Es horizontalSoluciona la dispersion de codigo
Importante: ¡¡La AOP no sustituye a la OOP, lacomplementa!!
Se puede aplicar a otro tipo de programacion
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionImplementaciones
Definiciones
Aspecto Funcionalidad que quieres aplicar a otras partes delcodigo (logging, gestion de transacciones, etc.)
Advice Cada una de las cosas que puede hacer un aspecto(Codigo a ejecutar)
JoinPoint Punto del programa en el que se ejecutara un advice(antes de un metodo, despues del contructor, etc.)
Pointcut Conjunto de JoinPoints (un conjunto de metodosdonde se ejecutara un aspecto).
Target El objeto sobre el que se aplicara el/los aspecto/s.
Introduction Manipular un target para anadirle codigo,implementacion de interfaces, etc.
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionImplementaciones
Tipos de advices
Before Justo antes del JoinPoint.
After returning Despues de que la ejecucion de JoinPoint termine’normalmente’ (sin lanzar excepcion) se ejecuta eladvice.
After throwing Si el JoinPoint lanza una excepcion se ejecuta eladvice.
After Despues de que termine un JoinPoint, hayaexcepcion o no.
Around Envuelve la ejecucion del JoinPoint, pudiendoejecutar codigo antes y despues de su ejecucion,pudiendo incluso evitar la ejecucion del JoinPoint.
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionImplementaciones
Weaver
Hemos separado los conceptos, ¿pero como los unimos?
Mediante preprocesador: complica el desarrolloMediante postprocesador binario: complica el desarrolloCompilador especifico para AOP: AspectJDurante la carga de clases: lentoEn tiempo de ejecucion: lento
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionImplementaciones
Weaver
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionImplementaciones
Implementaciones
Java: AspectJ, Jakarta Hivemind, JBoss AOP, Spring AOP, ...
Mono/.Net: Aspect#, Aspect.Net, Spring.Net AOP, ...
C++: AspectC++, FeatureC++, ...
C: AspectC, Aspicere2, ...
Tambien existen para otros lenguajes: Python, Cobol, Lisp,Ruby, Perl, ...
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Software a utilizar
Eclipse (http://www.eclipse.org)
AspectJ (http://www.eclipse.org/aspectj/)
AspectJ Development Tools (http://www.eclipse.org/ajdt/)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Introduccion a AspectJ
Dos formas:Mediante anotaciones (disponible a partir de AspectJ 5)
Para Java 5.0 o superiorUtiliza unicamente el lenguaje Java
Mediante sintaxis adicional (disponible en todas las versiones)
Para cualquier version de JavaAnade nueva sintaxis
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Definir un aspecto
Con anotaciones:
1 import org.aspectj.lang.annotation.Aspect;2
3 @Aspect4 public class Aspecto5 { ... }
Con sintaxis adicional
1 public aspect Aspecto2 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Definir un pointcut con anotaciones (I)
1 @<advice-specification>("<pointcut-kind>(2 [<access-specifier>] <return-type>3 <class-name>.<method-name>({<arg-type>}) )")4
5 public void metodo()6 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Definir un pointcut con anotaciones (II)
advice-specification puede tener los valores before, after, ...
pointcut-kind tipo del pointcut. Puede ser execution, call,staticinitialization, get, ...
access-specifier restriccion de acceso del metodo sobre el que se vaaplicar el advice. Puede ser public, protected, private,static, ... o combinaciones ’logicas’.
return-type valor de retorno del metodo sobre el que se va aplicarel advice
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Definir un pointcut con anotaciones (III)
class-name nombre completo (paquete + nombre) de la clasesobre el que se va aplicar el advice
method-name nombre del metodo sobre el que se va aplicar eladvice, en caso de ser un constructor sedebera utilizar la palabra ’new’
arg-type tipo de argumento del metodo sobre el que se vaaplicar el advice
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Definir un pointcut con anotaciones (IV)
Otra manera de hacerlo:
1 @Pointcut("<pointcut-kind>(2 [<access-specifier>] <return-type>3 <class-name>.<method-name>({<arg-type>}) )")4 public void <pointcut-name>()5 { ... }6
7 @<advice-specification>("<pointcut-name>()")8 public void metodo()9 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejemplo anotaciones (I)
1 @Before("execution(public void2 paquete.clase.metodo(String))")3
4 public void adviceEjemplo()5 {6 System.out.println("Antes del metodo");7 }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejemplo anotaciones (II)
1 @Pointcut("execution(public void2 paquete.clase.metodo(String))")3 public void pointcutEjemplo() {}4
5 @Before("pointcutEjemplo()")6 public void adviceEjemplo()7 {8 System.out.println("Antes del metodo");9 }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Definir un pointcut con sintaxis
1 pointcut <pointcut-name>(): <pointcut-kind>2 ( [<access-specifier>] <return-type>3 <class-name>.<method-name>({<arg-type>}) );4
5 <advice-specification>(): <pointcut-name>()6 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejemplo sintaxis
1 pointcut pointcutEjemplo(): execution2 (public void paquete.clase.metodo());3
4 before(): pointcutEjemplo()5 {6 System.out.println("Antes del metodo");7 }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio hola mundo
Crear una clase con main y otro metodo
Crear un aspecto con un advice que imprima por pantalla’Hola Mundo de los Aspectos!!!’
Aplicar el aspecto al ’otro metodo’ de la clase
Serıa interesante hacerlo de las tres formas
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio advice specifications
Probar las diferentes posiblidades de los advices:
@Before@After@AfterReturning@AfterThrowing@Around
Utilizar el ejercicio de los dibujos animados (1)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Operadores
Se aplican sobre JoinPoints
Unarios
Not (!)
Binarios
And (&&)Or (||)
Con lo que hemos visto hasta el momento solo es interesanteel ’or’, pero mas adelante veremos cuando utilizar el resto
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio operadores
Probar el operador ’or’ para aplicar un advice a diferentesmetodos
Utilizar el ejercicio de los dibujos animados (1)
Recomendacion: Crear un proyecto nuevo
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcut kinds (I)
execution Anade el advice dentro del metodo/constructor sobreel que se aplicaexecution(< patron − metodo >)Ejemplo: execution(public voidpaquete.clase.metodo(String))
call Anade el advice antes, despues, ... de la llamada almetodo/constructor sobre el que se aplicacall(< patron − metodo >)Ejemplo: call(public voidpaquete.clase.metodo(String))
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcut kinds (II)
staticinitialization Anade el advice antes, despues, ... delconstructor de una clase estaticastaticinitialization(< clase >)Ejemplo: staticinitialization(paquete.clase)
get Anade el advice antes, despues, ... de que se lea elcontenido del atributo sobre el que se aplicaget(< patron − atributo >)Ejemplo: get(String paquete.clase.atributo)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcut kinds (III)
set Anade el advice antes, despues, ... de que se escribael contenido del atributo sobre el que se aplicaset(< patron − atributo >)Ejemplo: set(int paquete.clase.atributo)
handler Representa los join points en donde se captura unaexcepcion del tipo indicado por la expresion. Estacaptura esta siempre especificada por una clausulacatch en Javahandler(< patron − excepcion >)Ejemplo: handler(paquete.excepcion)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcut kinds (III)
initialization Anade el advice antes, despues, ... de la creacion deuna instancia que utilice el constructor indicadoinitialization(< patron − constructor >)Ejemplo: initialization(paquete.clase.new())
preinitialization Anade el advice antes, despues, ... de la creacionde una instancia que utilice el constructor indicadoantes de que el constructor super sea llamadopreinitialization(< patron − constructor >)Ejemplo: preinitialization(paquete.clase.new())
adviceexecution Representa los join points donde se inicia laejecucion de un advice. No requiere argumentosadviceexecution()
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts basados en la estructura lexica
Capturan JoinPoints dentro del ambito lexico de un aspecto,clase y/o metodo
Dos tipos:
within: Captura todos los JoinPoints dentro de una clase oaspecto, incluso dentro de sus clases internaswithin(< patron − clase >)withincode: Captura todos los JoinPoints dentro de unmetodo, incluso dentro de sus clases localeswithincode(< patron − metodo >)
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio Pointcut kinds
Probar los diferentes Pointcut kinds
Utilizar el ejercicio de los dibujos animados (2)
Homer es un singleton y tiene un constructor estatico(staticinitialization)PersonajeFuturama sobreescribe el constructor por defecto(initialization y preinitialization)
Pistas:
Cuidado con el adviceexecution, si no se restringe su aplicacionse aplicara a sı mismo.En este ejercicio se tienen que utilizar los operadores ’and’ y’not’
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts basados en el flujo de control
Capturan JoinPoints en el flujo de contro de un metodo y/oadvice
Dos tipos:
cflow: Captura todos JoinPoints dentro del flujo de control deun metodo, constructor, ... incluyendo la llamadacflow(< pointcut − kind > (...))cflowbelow: Captura todos JoinPoints dentro del flujo decontrol de un metodo, constructor, ... excluyendo la llamadacflowbelow(< pointcut − kind > (...))
Cuidado: Cuando se quieren utilizar pointcuts basados en elflujo de control hay que definir dos JointPoint por lo menos
1 JoinPoint de flujo de control (cflow o cflowbelow)2 JoinPoint para restringir la aplicacion del anterior JoinPoint
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio de pointcuts basados en el flujo de control
Crear un Pointcut que se aplique a todos los metodos de lafuncion saludaA de PersonajeSimpsons
Cuidado con que el advice sea aplicado sobre si mismo
Comprobar la diferencia entre cflow y cflowbelow
Crear un Pointcut que se aplique solo a la llamada getNombrede la funcion saludaA de PersonajeSimpsons
Utilizar el ejercicio de los dibujos animados (1)
Recomendacion: Crear un nuevo proyecto
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts basados en el objeto de ejecucion (I)
A diferencia de los demas Pointcuts, estos se aplican entiempo de ejecucion.
Se aplican sobre un objeto.
Dos tipos:this: se comprueba si el objeto this de Java es de la claseindicada, en caso de serlo, se aplica el advice. Tambien esutilizado para acceder al objeto ’this’ de Java
Ejemplo comprobacion clase: this(paquete.Clase)Ejemplo acceso ’this’ de Java:
1 @Before("this(instancia) && ...")2
3 public void advice(Object instancia)4 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts basados en el objeto de ejecucion (II)
Dos tipos (continuacion):target: se comprueba si el objeto sobre el que se va a aplicar eladvice es el indicado. Tambien es utilizado para acceder altarget
Ejemplo comprobacion clase: target(paquete.Clase)Ejemplo acceso target:
1 @Before("target(instancia) && ...")2
3 public void advice(Object instancia)4 { ... }
En este tipo de Pointcut no se pueden utilizar los comodines’*’ y ’..’
El comodın + es innecesario ya que la herencia de Java ’lohace automaticamente’
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio Pointcuts basados en el objeto de ejecucion
Probar los pointcuts this y target
Ponerlos como unico JoinPoint y probar como funcionan
Concatenarlos con otro/otros JoinPoints
Utilizar el ejercicio de los dibujos animados (1)
Recomendacion: Crear un nuevo proyecto
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts de argumentos (I)
Permiten anadir contexto al advice
Se pueden aplicar a:
Metodos/constructores: Permiten acceder a los parametros delmetodo o constructor
1 @Before("args(arg1) && ...")2
3 public void advice(<tipo> arg1)4 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts de argumentos (II)
Se pueden aplicar a (continuacion):
Atributos: Permite consultar el nuevo valor que se le va aasignar
1 @Before("args(nuevoValor) && ...")2
3 public void advice(<tipo> nuevoValor)4 { ... }
Excepciones: Permite acceder a la excepcion que ha sidolanzada
1 @Before("args(e) && ...")2
3 public void advice(<excepcion> e)4 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio pointcuts de argumentos
Utilizar los tres tipos de pointcut
En el del atributo, obtener el valor viejo y el nuevo
Utilizar el ejercicio de los dibujos animados (1)
Recomendacion: Crear un nuevo proyecto
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Pointcuts condicionales
Permiten realizar comprobaciones antes de aplicar el advice
Solo hay un tipo:
if: Permite que el pointcut devuelva un ’boolean’. Si este’boolean’ es ’true’ entonces se ejecuta el advice
1 @Pointcut("if() && ...")2 public static boolean ifPointcut()3 { <comprobacion> }4
5 @Before("ifPointcut() && ...")6 public void ifAdvice()7 { ... }
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio pointcuts condicionales
Sacar un mensaje por pantalla cuando se intente asignar unnombre vacio ( o null) a un personaje
Sacar por pantalla un mensaje cuando se alguien salude aHomer
Utilizar el ejercicio de los dibujos animados (1)
Recomendacion: Crear un nuevo proyecto
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Uso de caracteres comodın
Asterisco (*):Clase: Representa cualquier caracter
cursillo.* : Cualquier clase del paquete ’cursillo’cursillo.*.Coche : Todas las clases llamadas ’Coche’ dentro delos subpaquetes hijo de ’cursillo’
Metodo o constructor: Representa cualquier caracter
cursillo.Alumno.get*(*) : Todos los metodos que empiecen porget y que tengan un parametro de la clase ’cursillo.Alumno’
Atributo: Representa cualquier caracter
cursillo.Alumno.a* : Todos los atributos que empiecen por ’a’de la clase ’cursillo.Alumno’
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Uso de caracteres comodın
Dos puntos (..):Paquete: Representa al paquete actual y a todos sussubpaquetes (directos e indirectos)
javax..* : Todas las clases de javax, javax.util, javax.swing, ...,javax.util.logging, ..., javax.swing.tree, ...
Metodo o constructor: Representa un numero variable deparametros
cursillo.Alumno.*(..) : Todos los metodos de la clase’cursillo.Alumno’cursillo.Alumno.*(String, ..) : Todos los metodos que tenganun primer parametro de tipo ’String’ de la clase’cursillo.Alumno’
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Uso de caracteres comodın
Operador suma (+):Clase o interfaz: Representa a las clases hijas o queimplementan la clase o interfaz
cursillo.Alumno+ : Todas las clases que extienden oimplementan de ’cursillo.Alumno’
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Ejercicio caracteres comodin
Probar los diferentes caracteres comodın
Utilizar el ejercicio de los dibujos animados (1). Aprovechar ...
... la jerarquia de clases
... los diferentes paquetes
... similitudes de nombres (PersonajesSimpsons,PersonajesFuturama)...
Recomendacion: Crear un nuevo proyecto
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Static crosscutting (I)
En ocasiones modificar el comportamiento mediante un adviceno es suficiente, es necesario modificar la estructura estaticade la clase
Dos tipos de crosscuting:
Dynamic crosscutting: modifica el comportamiento de laejecucionStatic crosscutting: modifica la estructura de los tipos
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Static crosscutting (II)
Se basa en el concepto ’introduction’ anteriormente explicado.Recordatorio:
Manipular un target para anadirle codigo, implementacion deinterfaces, etc
Tres tipos de modificaciones:
Member/method introduction: Permite anadir metodos yatributosModificacion de la jerarquia de clases: Permite implementarinterfaces y extender clasesIntroduccion de errores y warnings en tiempo de compilacion:Permite comprobar si se aplican aspecto no esperados
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Static crosscutting (III)
Ejemplo member/method introduction:
1 <access-specifier> <type> <class>.<member-name>;2
3 <access-specifier> <return-type>4 <class>.<method-name>()5 { ... }
access-specifier Puede ser public, protected o privatetype Tipo del atributoclass Clase a la que se le anade el metodo o atributo
member-name Nombre del atributoreturn-type Tipo de retorno del metodo
method-name Nombre del metodo
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Static crosscutting (IV)
Ejemplo modificacion de la jerarquia de clases
1 declare parents: <child-type-pattern>2 implements <interface-list>;3
4 declare parents: <child-type-pattern>5 extends [<class> | <interface-list>];
child-type-pattern Patron de clases que van aimplementar/extender otra interfaz/clase
interface-list Lista de interfaces que se quieren implementarclass Clase que se quiere extender
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting
Static crosscutting (V)
Ejemplo introduccion de errores y advertencias en tiempo decompilacion
1 declare error: <pointcut> : <message>;2
3 declare warning: <pointcut> : <message>;
pointcut Pointcut en el que, en caso de aplicar un advice,aparecera el error o la advertencia
message Mensaje a mostrar en el error o advertencia
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionEjemplos
Introduccion a la aplicacion de aspectos
¿Donde aplicar todo esto?
Logging, tracing y profilingAplicacion de politicasOptimizacion: Pools y cachesPatrones de disenoAutenticacion y autorizacionGestion de transacciones...
Programacion Orientada a Aspectos con AspectJ
IntroduccionAOP
AspectJAplicacion de los aspectos
IntroduccionEjemplos
Ejemplos
Logging
Caches
Reglas de negocio
Programacion Orientada a Aspectos con AspectJ
top related