Jajajaja la verdad es que me doy cuenta que no se programar mucho, y hay veces que pongo ejemplos de este tipo, donde las bases se supone que las tengo bien claras… jajajajaj en fin, leyendo un poco de varias cosas y con las ideas de nuevos temas que me dejan de tarea… púes me hice un ejemplo de Aspect (Programación Orientada a Aspectos) con Spring Framework, y bueno además me ayudo mucho en que es verdad que debemos de tomar muy en cuenta la forma de estructurar el proyecto, las clases, los patrones que vamos a utilizar, etc. etc. y muchas cosas que a estas alturas me falta mucho por aprender, pero sin más rollos aburridos… aquí les dejo un ejemplo:
Este ejemplo también lo hice con JAVA 1.4, pero la verdad es que mejor les voy a poder un ejemplo utilizando Java 5:
1.- Estamos utilizando en este caso las clases que hicimos en otro ejemplo con Hessian.
2.- Aquí vamos a hacer que el Aspecto se comporte como un proxi (esto quiere decir que cada vez que se llama a un recurso que le digamos se ejecutara nuestro interceptor)
3.- Así que sólo hay que agregar las cabeceras en el application-configuration.xml de nuestra aplicación.
1
2
3
4
5
6
| <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 |
4.- y además declaramos nuestros dos beans,
1) userServices: que es nuestra interfaz
2) requestInjector: que es la clase que vamos a utilizar como nuestro interceptor( proxi)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?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">
<!--
To use @AspectJ aspects in a Spring configuration you need to enable Spring support for configuring Spring AOP based on @AspectJ aspects, and autoproxying beans based on whether or not they are advised by those aspects. By autoproxying we mean that if Spring determines that a bean is advised by one or more aspects, it will automatically generate a proxy for that bean to intercept method invocations and ensure that advice is executed as needed.
-->
<aop:aspectj-autoproxy />
<bean id="requestInjector" class="com.aspect.interceptor.ResquetInterceptor" />
<bean id="userServices" class="com.serunix.services.impl.UserServicesImpl" />
</beans> |
5.- y por último creamos nuestro Interceptor.
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
| /*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.aspect.interceptor;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
/**
*
* @author sergio
*/
@Aspect
public class ResquetInterceptor {
private static final Logger log = Logger.getLogger(ResquetInterceptor.class);
/** Es quí donde le decimos que se ejecute, que casa vez que se ejecute una clase que se encuentra en este paquete
* las diferente formas en que se puede ejecutar las pueden consultar en la documentación. :)
/
@Before("execution(* com.serunix..*.*(..))")
public void before(JoinPoint thisJoinPoint) {
log.info("Before [" + thisJoinPoint.toShortString() + "]");
}
} |
6.- Y bueno eso es todo, creamos nuestro Test con JUnit o haciendo una clase main o como quieran, y les tiene que imprimir el info que tenemos dentro del método de before()
Pero para que nos puede servir esto:
1.- Para saber cuantas veces se ejecuta un recurso(estadísticas)
2.- Insertar en la DB
3.- Cambiar rutas, configuraciones, etc. etc.
lo importante es saber que debemos implementarlo si y sólo sí, es necesario ya que nos pega en el rendimiento de la aplicación.