Post on 04-Jul-2015
description
Spring AOP(Aspect Oriented Programming)
(Programación Orientada a Aspectos)
Mayer Horna García
mayer@lima-ti.com
mayer.horna@gmail.com
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com
ObjetivosEntender:
Que es AOP
En que nos ayuda AOP
Como apoya AOP a la POO
Spring AOP
Agenda
Evolución del software
¿Qué es AOP?
Conceptos básicos de AOP
Demos con AspectJ
Demo con Spring AOP
Introducción
¿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).
Evolución del Software
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
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???
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…
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.
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.
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
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
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
¿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).
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
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.
Sintaxis AspectJpointcut
advice
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
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
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
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
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
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
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
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
Demodemowebconaop_base: Proyecto web(Servlets y JSP) sin aspectos
Tarea: Aplicar un aspecto Solución: proyecto: demowebconaop_base _solucion
proyecto: demowebconaop_base
Spring AOP
Módulos de Spring Framework
Spring AOPOrientación a Aspectos(AOP): presenta una estructura
simplificada para el desarrollo y utilización de aspectos.
Demo
demowebconaop_spring_solucion: Proyecto web(Spring) con AOP
proyecto: demowebspringaop
Preguntas
Gracias
Mayer Horna García
mayer@lima-ti.com
mayer.horna@gmail.com
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com