Programación orientada a aspectos spring framework

0

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>


<-- post en trabajo--->

Comentarios cerrados automáticamente al pasar más de un año