Por admin | Para la categoría de spring | noticia del 03-07-2010
Una breve introducción teórica, en este caso además se realiza un ejemplo para spring para poner en práctica los elementos teóricos.
La programación orientada a aspectos es un concepto que se puede aplicar a cualquier lenguaje de programación, toda aplicación tiene algunas funciones que implican diversos puntos de la aplicación, estas funciones se denominan aspectos transversales. La programación aop permite desacoplar esos aspectos transversales de los puntos de la aplicación a los que afectan.
En una aplicación dividimos los diferentes requerimientos en módulos, pero existen diferentes funcionalidades de la aplicación que afectan a los diferentes módulos de la aplicación. por ejemplo la seguridad, que tiene que estar presente en todos los puntos de la aplicación constituyendo un aspecto transversal que afecta a todos los puntos de la aplicación.
Dentro de la oap existen un conjunto de conceptos asociados con su correspondiente terminología.
Las notificaciones, constituyen el propósito de un aspecto, describe la tarea que se va a realizar así como el cuándo se va a realizar.
Punto de unión (joinpoint) es un punto en la ejecución de la aplicación y es esos puntos donde se inserta un aspecto. Estos puntos pueden ser la llamada a un método o el lanzamiento de una excepción, son los puntos donde la funcionalidad del aspecto aporta
Punto de corte (pointcut), un aspecto no tiene porque influir en todos los puntos de unión de la aplicación , los puntos reducen los puntos de unión, determinando el dónde
Un aspecto es la unión de una notificación y de un punto de corte y de una notificación.
Conjunto de archivos que se van a utilizar en este ejemplo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package quintoejemplo; public class Estudiante { private String nombre; private String materia; public Estudiante (String nombre,String materia) { this.nombre = nombre; this.materia = materia; } public void getNombre() { System.out.println("Nombre del estudiante"+this.nombre); } public void preparaExamen () { System.out.println("Prepara el examen para "+this.materia); } public void celebraAprobado () { System.out.println("Celebra el aprobado"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package quintoejemplo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class EstudianteApp { public static void main (String[] args ) { ApplicationContext contexto = new ClassPathXmlApplicationContext("quintoejemplo\\Examen.xml"); Examen examen= (Examen) contexto.getBean("examen1"); examen.realizar(); } } |
1 2 3 4 5 6 7 | package quintoejemplo; public interface Examen { public void realizar (); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package quintoejemplo; public class ExamenImp implements Examen { private String materia; public ExamenImp (String materia) { this.materia = materia; } public void realizar() { System.out.println("Realizando el examen de la materia "+this.materia); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <aop:config> <aop:aspect ref="realizacionexamen"> <aop:pointcut id="puntodecorte" expression="execution(* *.realizar(..))"/> <aop:before method="preparaExamen" pointcut-ref="puntodecorte" /> <aop:after method="celebraAprobado" pointcut-ref="puntodecorte" /> </aop:aspect> </aop:config> <bean id="examen1" class="quintoejemplo.ExamenImp"> <constructor-arg value="matematicas"/> </bean> <bean id="realizacionexamen" class="quintoejemplo.Estudiante"> <constructor-arg value="juan"/> <constructor-arg value="matematicas"/> </bean> </beans> |


