Wednesday, 15 April 2009

AJDT: AspectJ Development Tools

Siguiendo en la línea del post del día 9 de abril sobre el AOP (Programación orientada a Aspectos), aquí os hago una pequeña demostración y algún ejemplo de como integrar AspectJ en el eclipse. Primero nos descargamos el paquete para nuestra versión de eclipse, en mi caso la 3.4.1 Ganymede (ya lo comenté un día en algún post).
Aquí os dejo en enlace directo para la descarga:

Copiamos el fichero ajdt_1.6.4_for_eclipse_3.4.zip dentro de la carpeta donde tenemos instalado el Eclipse, en mi caso en C:\Archivos de Programa\dev\Eclipse y extraemos el contenido de todo el paquete. Directamente se copiaran dentro de la carpeta plugins y features. Ahora solo falta iniciar el eclipse, y podremos ver que les herramientas del AspectJ están ya integradas en el IDE del eclipse.

Una vez iniciamos el eclipse, podemos ver en la pantalla principal (overview):

  • Un ejemplo práctico y sencillo:
Por la red, podemos encontrar un sinfín de ejemplos basados en AspectJ o en AOP Guice que es como lo hice el otro día, de todas formas, aquí, podemos encontrar un manual que está bastante bien.

Primero creamos un proyecto, en este caso se llamará HelloWorldAspect, y crearemos una pequeña clase que simplemente diga "Hello". Una vez hecha la clase, con el botón derecho del ratón, convertiremos este proyecto a AspectJ Project, una vez hecho, el proyecto aparecerá de la siguiente manera:

El código es el siguiente:




public class HelloWorld {
public void sayHello() {
System.out.println("Hello");
}

public static void main(String[] args) {
new HelloWorld().sayHello();
}
}




Ahora nos ha añadido la librería del AspectJ, y solo falta crear el nuevo aspecto sobre nuestra clase. Por lo tanto, nos dirigiremos hacia el botón de "New Java Class", pero escogeremos "New Aspect":

Vamos a crear un Aspect que se llame World.aj, y que contenga el siguiente código:




public aspect World {
pointcut greeting() :
execution (* HelloWorld.sayHello(..));

before() : greeting() {
System.out.println("Before greeting!");
}

after() : greeting() {
System.out.println("After greeting!");
}

after() returning : greeting() {
System.out.println("After returning greeting!");
}
}




Una vez hemos completado todos los pasos, deberíamos tener algo como esto (mostrando todas las referencias del AspectJ):


El resultado de la ejecución de la aplicación, es el siguiente:

Before greeting!
Hello
After greeting!
After returning greeting!

Por lo tanto, hemos interceptado el mensaje que manda nuestra clase, y hemos ejecutado un código antes y después del mensaje. Es el mismo concepto, de interceptar lo que está diciendo nuestra clase y que mostré en el post del AOP.

El funcionamiento es bastante simple pero potente a su vez. Primero creamos un punto de corte que lo llamaremos Greeting, este punto de corte está asociado a un método de nuestra clase. Luego sobre este punto de corte se vigilan los accesos (before, after, after returning, after throwing, etc) y se muestra el resultado de estos por pantalla. Mediante esta guia, podemos introducirnos mejor en este mundo del AOP.

Podemos ver el aspecto de nuestro proyecto con la vista del AspectJ:

  • Más ejemplos en:
http://www.eclipse.org/ajdt/demos/

0 comments:

Post a Comment