Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Maven-Spring-Aspectos con @Configurable y Weaving

Porqué la mayoría de la gente usa Load Time Weaving (LTW)? Esto requiere reemplazar el javaagent/classloader para tu JVM el cual batalla con el ordenamiento de todas las cosas.
Echemos un vistazo usando mejor el Compile Time Weaving (CTW).
Este ejemplo usa Spring 2.5.2, AspectJ 1.5.4, Java 1.5 (Spring 2.5.4 usa una version posterior de weaver (3.0 contra 5.0) - Asumo que AspectJ 1.6.0 pero el aspectj-mave-plugin está también basado alrededor de la versión 1.5.4, así que por ahora trabajemos con esta combinación.
En Spring, podemos simplemente inyectar recursos a beans normales de Spring, incluso vía la configuración del contexto de Spring, o usando el soporte para anotaciones basadas en inyecciones ((@Resource, @Autowired junto con @Repository, @Service etc).
Sin embargo, beans que son de alcance prototipo (scope="prototype") son más difíciles de manejar. Estas son renovadas (Bean foo = new FooBean();) incluso por el desarrollador o por frameworks externos o (Hibernate para beans del modelo, contenedores de servlet, etc.).
El sitio spring framework provee la anotación @Configurable para esto.

Cualquier bean que es anotado con @Configurable será inyectado con sus propiedades utilizando aspectos. Entonces necesitamos que las cosas estén preparadas para que este aspecto se ejecute.

Lo primero - el contexto de Spring.
Necesitas los siguiente en el contexto de tu aplicación:

<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<context:component-scan base-package="tu.paquete.raiz"/>
<context:spring-configured/>
<!-- mas beans  ... -->
</beans>

Recuerda agregar el context namespace a la declaracion de esquemas en tu archivo de contexto.
Ahora la configuracion de Maven
Necesitarás usar aspectj-maven-plugin desde el proyecto codehaus MOJO.

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<configuration>
<complianceLevel>1.5</complianceLevel>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>

Estos jars de la lista de librerias de aspectos deberían contener aspectos pre-compilados (en este caso las de Spring) y estos aspectos serán enlazados en tiempo de compilación contra el tiempo de compilación del código.
Lo que sigue esta traducido del documento original pero ya no existen los enlaces:

Hay un ejemplo disponible en mercurial
hg clone https://svn.chrissearle.net/mercurial/examples
Luego mira en el aspectj/directorio ctw.
Si no tienes mercurial entonces puedes navegar en : https://svn.chrissearle.net/mercurial/examples/file/tip/aspectj/ctw/
Traducido de: chrissearle.org jueves 22 de Mayo 2008 por chris
Más referencias:

No hay comentarios:

Publicar un comentario

Que opinas sobre esta publicación?