Aop
-
Upload
mayer-horna -
Category
Technology
-
view
1.958 -
download
1
description
Transcript of Aop
![Page 1: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/1.jpg)
Spring AOP(Aspect Oriented Programming)
(Programación Orientada a Aspectos)
Mayer Horna García
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com
![Page 2: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/2.jpg)
ObjetivosEntender:
Que es AOP
En que nos ayuda AOP
Como apoya AOP a la POO
Spring AOP
![Page 3: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/3.jpg)
Agenda
Evolución del software
¿Qué es AOP?
Conceptos básicos de AOP
Demos con AspectJ
Demo con Spring AOP
![Page 4: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/4.jpg)
Introducción
![Page 5: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/5.jpg)
¿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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/6.jpg)
Evolución del Software
![Page 7: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/7.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/9.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/12.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/15.jpg)
¿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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/18.jpg)
Sintaxis AspectJpointcut
advice
![Page 19: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/26.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/28.jpg)
Spring AOP
![Page 29: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/29.jpg)
Módulos de Spring Framework
![Page 30: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/30.jpg)
Spring AOPOrientación a Aspectos(AOP): presenta una estructura
simplificada para el desarrollo y utilización de aspectos.
![Page 31: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/31.jpg)
Demo
demowebconaop_spring_solucion: Proyecto web(Spring) con AOP
proyecto: demowebspringaop
![Page 32: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/32.jpg)
Preguntas
![Page 33: Aop](https://reader033.fdocuments.ec/reader033/viewer/2022052909/5597c9701a28ab62608b457e/html5/thumbnails/33.jpg)
Gracias
Mayer Horna García
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com