Aop

33
Spring AOP (Aspect Oriented Programming) (Programación Orientada a Aspectos) Mayer Horna García [email protected] [email protected] http://www.linkedin.com/in/mayerhorna http://mayerhorna.blogspot.com

description

Presentación de Spring AOP - Spring Community Day 2010

Transcript of Aop

Page 1: Aop

Spring AOP(Aspect Oriented Programming)

(Programación Orientada a Aspectos)

Mayer Horna García

[email protected]

[email protected]

http://www.linkedin.com/in/mayerhorna

http://mayerhorna.blogspot.com

Page 2: Aop

ObjetivosEntender:

Que es AOP

En que nos ayuda AOP

Como apoya AOP a la POO

Spring AOP

Page 3: Aop

Agenda

Evolución del software

¿Qué es AOP?

Conceptos básicos de AOP

Demos con AspectJ

Demo con Spring AOP

Page 4: Aop

Introducción

Page 5: Aop

¿Qué es Spring?

Es un framework contenedor liviano basado en la técnica de Inversión de Control (IoC) y una implementación de desarrollo según el paradigma de Orientación a Aspectos(AOP).

Page 6: Aop

Evolución del Software

Page 7: Aop

Evolución del Software1° Generación:Código espaghetti

No existía un orden al programar. En conclusión: era difícil dar mantemiento al programa cuando este crecía.

ventas.cpp

Page 8: Aop

Evolución del Software2° y 3° Generación:Descomposición funcional

Se modularizó agrupando funcionesSub grabarCliente( Codigo As String,

Apellido As String, Nombre As String, Calle As String,Ciudad As String,…)

'Codigo para grabar ClientesEnd Sub

¿Que ocurría si mas adelante, se decide que el cliente no debe registrar Ciudad ni Pais, y SÍ un campo llamado Contacto?

Problema: Se hubiera tenido que modificar los parámetros en la función grabarCliente y en cualquier otra función que grabe, consulte o edite un cliente.

Solución: Encapsular estas propiedades en una estructura llamada Cliente.¿¿¿Estaremos hablando de Clases y Objetos???

Page 9: Aop

Evolución del Software4° Generación:Descomposición en objetos

Permitió encapsular funcionalidad en Clases

public void grabarCliente(Cliente objCliente){ //Codigo para grabar Clientes}

ClienteServiceImpl.java

Cliente

-codigo:String-apellido:String-nombre:String…

+getNombre():String…

Page 10: Aop

Evolución del Software¿5° Generación?:

Descomposición de aspectos. ¿Una quinta generación?

Permite desacoplar funcionalidades del sistema, y trabajarlas de manera transversal.

Como por ejemplo, la audtoría del sistema, la seguridad, la transaccioanlidad, etc.

Page 11: Aop

Problema:

ClienteServiceImpl.java

Supongamos que el método grabarCliente debe tener las siguientes funcionalidades:1)Verifica si el usuario en sesión tiene o no permiso para grabar clientes. Si pasa la validación, entonces:2)Inicia la transacción con la base de datos.3)Graba el nuevo cliente en tabla.4)Graba en la tabla de auditoria que un nuevo registro ha sido añadido a la tabla cliente, indicando cual es el usuario responsable de la operación.5)Hacer commit o rollback a la transacción, dependiendo de si fue exitosa o fallida la operación.

Page 12: Aop

Partiendo de la premisa anteriorSi pensamos en separación de aspectos, llegamos a la conclusión de que:

Supongamos que el método grabarCliente debe tener las siguientes funcionalidades:1)Verifica si el usuario en sesión tiene o no permiso para generar clientes. Si pasa la validación, entonces:2)Inicia la transacción con la base de datos.3)Graba el nuevo cliente en tabla.4)Graba en la tabla de auditoria que un nuevo registro ha sido añadido a la tabla cliente, indicando cual es el usuario responsable de la operación.5)Hacer commit o rollback a la transacción, dependiendo de si fue exitosa o fallida la operación.

1)Aspecto: Seguridad

Asp

ec to

: Tr a

nsa

c cion

al id

ad

2) y

5)

Asp

ect

o:

Au

dit

ori

a4

)

Objetivo Principal

Page 13: Aop

Partiendo de la premisa anterior(En el Código)Si pensamos en separación de aspectos, llegamos a la conclusión de que:

1)Aspecto: Seguridad

Asp

ec to

: Tr a

nsa

c cion

al id

ad

2) y

5)

Asp

ect

o:

Au

dit

ori

a4

)

Objetivo Principal

Page 14: Aop

Partiendo de la premisa anterior(En el Código)

Así debería ser nuestro código, optimizado con AOP:

1)Aspecto: Seguridad

Asp

ec to

: Tr a

nsa

c cion

al id

ad

2) y

5)

Asp

ect

o:

Au

dit

ori

a4

)

Sólo debemos preocuparnos en el objetivo principal, que es grabar un registro de cliente.

Y lo demás separarlo como aspectos

Page 15: Aop

¿Qué es AOP?Paradigma de programación cuya intención es permitir

una adecuada modularización de las aplicaciones y posibilitar una mejor separación de componentes.

Es un complemento para la programación orientada a objetos (OOP).

Por medio de AOP podemos modificar dinámicamente un modelo estático a fin de incluir funcionalidades secundarias (transaccionalidad, seguridad, auditoria, etc).

Page 16: Aop

Aspect(Aspecto). Es la funcionalidad o característica que vamos a separar (Por ejemplo: Auditoría).

PointCut(Punto de Corte). Define donde se aplicará el aspecto. Se especifica mediante Expresiones Regulares o mediante patrones de nombres (de clases, métodos o campos). Ejemplo:

Advice. Indica que se va hacer en el momento (before, after,etc) que se aplique el aspecto.

Before After returning After throwing After Around

Antes de empezar, entendamos algunos conceptos AOP

Page 17: Aop

Antes de empezar, entendamos algunos conceptos AOP

AspectJ AspectJ es un lenguaje de programación orientado por aspectos

construido como una extensión del lenguaje Java.

Existen otros lenguajes de AOP, como: COOL, Aspect, Aspyct

Spring Framework Es un framework para el desarrollo de aplicaciones java basado en la

técnica de Inversión de Control (IoC) y una implementación de desarrollo según el paradigma de Orientación a Aspectos(AOP).

Spring AOP Es un módulo de Spring Framework que te permite hacer

programación orientada a aspectos. Soporta AspectJ, y puedes utilizarlo de manera mas sencilla.

Page 18: Aop

Sintaxis AspectJpointcut

advice

Page 19: Aop

Demodemo01: Creando un proyecto AspectJ

uso de pointcut y advice aspecto aplicado antes de la ejecución del cuerpo de un

método

proyecto: demos_aop

Page 20: Aop

Demodemo02: Aspecto aplicado después del llamado de un método

(Diferencias entre call y execution)Ver los .class generados y comparar diferencias

proyecto: demos_aop

Page 21: Aop

Demodemo03: Aspecto aplicado antes y después de la ejecución del cuerpo

de un métodoVer los .class generados y observar el código generado

proyecto: demos_aop

Page 22: Aop

Demodemo04: Aspecto aplicado de tipo around

Uso de proceed() para ejecutar el cuerpo del métodoVer los .class generados y comparar diferencias

proyecto: demos_aop

Page 23: Aop

Demodemo05: Aspecto aplicado de tipo after solo si el método arroja

una exepción ( after() throwing () )probar throwing(ArithmeticException ex) u otras excep.

Ver los .class generados y comparar diferencias

proyecto: demos_aop

Page 24: Aop

Demo

demo06: Aspecto aplicado de forma genérica a un conjunto de métodos que cumplen un mismo patrón.

Uso de expresiones de AspectJ en los pointcut

proyecto: demos_aop

Page 25: Aop

Demo

demo07: Aspecto aplicado de forma genérica a un conjunto de métodos que cumplen un mismo patrón y que dichos métodos tienen

un parámetro en su declaración.Uso de expresiones de AspectJ en los pointcut

proyecto: demos_aop

Page 26: Aop

Demo

demo08: Aspecto aplicado de forma genérica a un conjunto de métodos que cumplen un mismo patrón y que dichos métodos tienen

mas de un parámetro en su declaración.Uso de expresiones de AspectJ en los pointcut

proyecto: demos_aop

Page 27: Aop

Demodemowebconaop_base: Proyecto web(Servlets y JSP) sin aspectos

Tarea: Aplicar un aspecto Solución: proyecto: demowebconaop_base _solucion

proyecto: demowebconaop_base

Page 28: Aop

Spring AOP

Page 29: Aop

Módulos de Spring Framework

Page 30: Aop

Spring AOPOrientación a Aspectos(AOP): presenta una estructura

simplificada para el desarrollo y utilización de aspectos.

Page 31: Aop

Demo

demowebconaop_spring_solucion: Proyecto web(Spring) con AOP

proyecto: demowebspringaop

Page 32: Aop

Preguntas

Page 33: Aop

Gracias

Mayer Horna García

[email protected]

[email protected]

http://www.linkedin.com/in/mayerhorna

http://mayerhorna.blogspot.com