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?