09-08-2006 Raul Vicente
Hace poco mi compañero escribió un post sobre programación orientada a aspectos al final del post yo le respondí las diferencias existentes entre AspectJ y Spring AOP . Al final me decidí a probar todo lo que había leído sobre Spring AOP e hice un pequeño proyectillo.
Spring permite el uso de aspectos en tiempo de ejecución mediante proxys dinámicos lo cual tiene ventajas e inconvenientes, la gran ventaja es que sólo hace falta la JDK para poder implementar los aspectos y la desventaja que limita el uso de los aspectos a nivel de método frente a otro tipo de soluciones que permiten el uso a nivel de clase e incluso instancia (ApectJ).
Para los que no hayais leído nada sobre AOP sólo comentar que un aspecto son aquellas partes de una aplicación que no tienen nada que ver con la lógica de la misma pero que son necesarias por ejemplo para aportarle seguridad. Un ejemplo claro es abrir/cerrar una conexión con la base de datos o una transacción. En Spring esto se trata como un aspecto de manera declarativa en el fichero de configuración y el programador no ecribe ni una línea de código al respecto.
Spring permite aplicar aspectos antes,durante y despúes de ejecutar un método y cuando éste eleva una excepción permitiendo así que partes de la aplicación como la comprobación de que un usuario tiene permiso para ejecutar un método no contaminen la lógica de negocio.
Para aplicar un aspecto al método:
Squishee buySquishee(Customer customer) throws KwikEmartException;
de la interfaz KwikEmart antes de que se ejecute habría que:
< bean id="kwikEmart" class="org.springframework.aop.framework.ProxyFactoryBean" >
< property name="proxyInterfaces" >
< value >org.raul.beans.KwikEmart< /value >
< /property >
< property name="interceptorNames" >
< list >
< value >welcomeAdvice< /value >
< /list >
< /property >
< property name="target" >
< bean class="org.raul.beans.ApuKwikEmart" >
< /bean >
< /property >
< /bean>
De aquí sólo destacar que el aspecto welcomeAdvice tiene que estar declarado y que yo no lo he puesto por acortar, que la interfaz a la que se le aplica es KwikEmart y la implementación de esta interfaz corresponde a la clase ApuKwikEmart.
Este ejemplo se comenta en profundidad en el libro Spring in Action de la editorial Manning. Si quereís algo menos farragoso para poder empezar podeís visitar la página de Spring.
1. Spring 2.0 manejo declara&hellip | noviembre 9th, 2006 at 11:02 am
[...] Continuando con en post sobre manejo declarativo de transacciones en Spring 1.2, está vez abordaré las diferencias de hacer la misma tarea en Spring 2.0. La mayor diferencia es que mientras que Spring 1.2 utilizaba Spring AOP que era muy limitado ya que sólo permitía programación orientada a aspectos a nivel de método, Spring 2.0 se integra perfectamente con AspectJ dando toda la potencia de la programación orientada a aspectos, pero facilitando la sintaxis. Es decir, Spring 2.0 propone programar los aspectos en AspectJ pero de manera declarativa, también ofrece la posibilidad de utilizar annotations tanto para definir aspectos como para realizar transacciones de manera declarativa. En este post abordaré como realizar transacciones de manera declarativa dejando el tema de los aspectos para otro post, a su vez tan sólo especificaré lo que cambia respecto a Spring 1.2 así que el que tenga dudas puede revisar este post. [...]