Pregunta

Actualización 5: He descargado la última primavera ToolsSuite IDE basado en el último Eclipse. Cuando importo mi proyecto como un proyecto Maven, Eclipse / STS parece utilizar los objetivos de Maven para la construcción de mi proyecto. Esto significa AspectJ finalmente funciona correctamente en Eclipse.

Actualizar. 4: Me han terminado simplemente usando Maven + AspectJ plug-in para tejer en tiempo de compilación, una derivación eficaz mecanismo de Eclipse

Seguimiento 3: Parece plug-in se rompe la capacidad de Eclipse Eclipse de AspectJ publicar correctamente para Tomcat. Sólo mediante la eliminación de la capacidad AspectJ en un proyecto puedo conseguir que se publica correctamente de nuevo. Muy molesto.

Actualización 2: Tengo esta trabajando ahora en Eclipse. Se me hace muy incómodo para decir esto, pero no tengo ni idea de cómo lo tengo trabajando desde cualquiera Eclipse o Maven construye. Parece ser un problema de compilación en lugar de un problema de tiempo de ejecución.

Actualización 1: Parece que he conseguido que funcione a través de Maven construye, pero no tengo ni idea de cómo. Eclipse sigue sin funcionar. Lo único que ha cambiado en el pom.xml fue la adición de estos parámetros de configuración (insignificante?):

<source>1.6</source>
<complianceLevel>1.6</complianceLevel>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>

En realidad estoy preocupado de que tengo una repetición de este problema , donde todo funciona de manera inconsistente. Voy a mantener actualizada esta pregunta a medida que aprendo más.

En lo que respecta a Eclipse, he hecho algunos avances mediante la adopción de los aspectos binarios que deseo para tejer - en este caso primavera-aspects.jar - y lo copia de mi ruta de clase. Luego agregar este frasco ahora externa a mi Ruta Aspecto . Después de hacer esto, Eclipse muestra correctamente me marcadores AspectJ en mi código. Es muy molesto que no puedo acaba de salir de primavera-aspects.jar en mi Build Path Java que se mantiene por Maven para mí a través del plug-in de Maven. Por alguna razón, sin embargo, el plug-in de AspectJ no ve los aspectos binarios a menos que estén explícitamente añaden a la Ruta Aspecto .


Post original: @Configurable es una anotación de resorte que permite a las dependencias que se inyecta en los objetos instanciados externa a la primavera (por ejemplo, por Hibernate o alguna clase de fábrica)

.

Yo estaba usando esta anotación previamente con el tejido en tiempo de carga y sobre todo trabajé. De vez en cuando me gustaría arrancar y nada se obtendría inyectado. Este problema generó esta cuestión StackOverflow . No había muchas respuestas, pero la mayoría sugirió que probara en tiempo de compilación en lugar de tejer debido a una mayor fiabilidad.

He instalado el AspectJ plug-in para Eclipse y Maven. Ambos producen lo que parece ser las clases rellenado correctamente. He abierto una de las clases en un editor de texto antes de la compilación AspectJ y encontré ninguna referencia a AspectJ. Lo abrí después de la compilación AspectJ y ambos Eclipse y Maven generada versiones tienen una referencia a org.aspectj.weaver.MethodDeclarationLineNumber . Esto es por lo que supongo que está siendo rellenado correctamente. El problema es que una vez desplegado, sin dependencias quedan inyectados.

Mi Primavera applicationContext.xml no incluir lo siguiente:

    <context:spring-configured />

    <context:component-scan base-package="com.myapp" />

es el por encima de todo lo que se necesita para las clases marcado @Configurable haber hecho DI? Durante la conversión de la carga en tiempo tejiendo a tiempo de compilación tejer, quité META-INF / aop.xml , de mi applicationContext.xml , y de primavera Tomcat tejedora de mi context.xml .

¿Cómo puedo investigar este problema adicional? ¿Cuáles son las posibles causas?

¿Fue útil?

Solución

Se trabaja para nosotros en experta utilizando compilar tejer tiempo, trate de añadir los siguientes plugins:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
    <compilerVersion>1.6</compilerVersion>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>
</plugin>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
    <execution>
        <id>compile</id>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <verbose>false</verbose>
            <outxml>true</outxml>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <goals>
            <goal>compile</goal>
        </goals>
    </execution>
    <execution>
        <id>test-compile</id>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <verbose>false</verbose>
            <aspectLibraries>
                <aspectLibrary>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                </aspectLibrary>
            </aspectLibraries>
        </configuration>
        <goals>
            <goal>test-compile</goal>
        </goals>
    </execution>
</executions>
<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.4</version>
    </dependency>
</dependencies>
</plugin>

Su hecho como dos pasos de ejecución independientes que le permiten agregar diferentes bibliotecas de aspecto para las pruebas unitarias y compilación.

También necesitará la siguiente dependencia añadido para la biblioteca de primavera-aspectos:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <scope>compile</scope>
    </dependency>

Otros consejos

He configurado con éxito el tejido en tiempo de carga en mi aplicación, si se trata de una alternativa para usted.

Mi entorno:

  • JDK 1.6-
  • Primavera-2.5.6
  • JPA con EclipseLink-1.1.0

Los detalles de configuración:

configuración XML de primavera:

<context:annotation-config/>
<context:spring-configured/>
<context:load-time-weaver/>

<bean id="baseEntity" class="package.name.BaseEntity" scope="prototype">
  <property name="historyHandler" ref="historyHandler" />
</bean>

<bean id="historyHandler" class="package.name.HistoryJpaHandler" scope="prototype">
  <property name="historyDao" ref="historyDao" />
</bean>

<bean id="historyDao" class="package.name.HistoryJpaDao">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

anotaciones Spring

@Configurable("baseEntity")
public abstract class BaseEntity

@Configurable("historyHandler")
public class HistoryJpaHandler extends SessionEventAdapter implements HistoryHandler 

Java VM del parámetro

<JAVA_HOME>/bin/java -javaagent:/full/path/to/spring-agent-2.5.6.jar

Las instancias de historyHandler y baseEntitty son creados por ecliselink. historyHandler en baseEntitty y historyDao en historyHandler se establece por la carga-timeweaving.

Puede configurar la máquina virtual de parámetros de configuración en Eclipse carrera o en Tomcat catalina.sh/bat.

hacer un campo de una clase @configurable Autowired lanza NullPointerException si no configura correctamente su primavera para esta anotación. siga estos pasos para realizar anotaciones @configurable funcionan correctamente

Este método se llama AspectJ construir el tiempo tejiendo para inyectar granos de primavera a sus clases no-primavera-hechos .

El primer paso es instalar estos plugins de Eclipse:

A partir de estos dos sitios de actualización de Eclipse instalar lo sugiere:

http://download.eclipse.org/tools/ajdt/43/update
http://dist.springsource.org/release/AJDT/configurator/ 

Después de la instalación, haga clic en proyecto y hacer:

Configure > Convert to Aspectj
Maven > Update

A continuación, es necesario agregar de inmediato a su pom.xml:

Añadir en Dependencias:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.0.2.RELEASE</version>
</dependency>

Bajo plugins Añadir:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.5</version>
            <configuration>
                <showWeaveInfo>true</showWeaveInfo>
                <source>1.7</source>
                <target>1.7</target>
                <Xlint>ignore</Xlint>
                <complianceLevel>1.7</complianceLevel>
                <encoding>UTF-8</encoding>
                <verbose>false</verbose>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>1.7.0</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>1.7.0</version>
                </dependency>
            </dependencies>
        </plugin>

Importante: NO utilizar cualquier etiqueta <pluginManagment> bajo la etiqueta <build>. su pom.xml tiene que ser algo como esto:

<project ....>
    ....
    <dependencies>
        <dependency> 
                    ....
        </dependency>
                ....
    </dependencies>
    <build>
        <plugins>
            <plugin>
                            ....
            </plugin>
                        ....
        </plugins>
    </build>
</project>

<context:spring-configured /> por último añadir a su archivo de configuración de contexto de aplicación de primavera.

Ahora puede anotar una clase POJO como @Configurable e inyectar granos de primavera en ella utilizando la anotación @Autowired. de esta manera cada vez que hagas una nueva instancia de esa POJO se puede configurar (por ejemplo, inyectado con dependencias) de forma automática.

En lo que se refiere a sus problemas de rutas de clases de Eclipse, es posible encontrar esto útil.

El Plugin m2eclipse tiene un opcional integración AJDT . La integración lee la sección de configuración de la aspectLibraries de aspectj-maven-plugin, y contribuye a los frascos Eclipse del Camino de aspecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top