2009-09-07 10 views
5

Tengo problemas para lograr que AspectJ realice el trabajo de carga de una clase anotada con @configurable en mi proyecto principal. No se establecen campos y ninguno de los ajustadores se tocan.Tejido del tiempo de carga del muelle no detecta la clase anotada con @configurable

No creo que haya problemas con la configuración en sí, porque he extraído la configuración y la he probado en un proyecto de espacio aislado más pequeño. Solo por el bien, lo incluiré en esta pregunta sin embargo.

Por lo tanto, me pregunto:

  1. ¿Hay algo en el proyecto más grande que podría estar obstaculizando la primavera/AspectJ de detección de la esta clase en particular?
  2. ¿Hay alguna manera de verificar si la primavera está al tanto de la clase en las preguntas?

Y, por último, cualquier código que puedo extraer (disculpen la ofuscación):

De XML de configuración:

<context:annotation-config /> 
<context:spring-configured /> 
<context:component-scan base-package="se.isydev" /> 
<context:component-scan base-package="se.istools" /> 
<aop:aspectj-autoproxy /> 
<context:load-time-weaver aspectj-weaving="on" /> 
<context:property-placeholder location="classpath:settings.properties" /> 
(...) 
<bean class="com.company.ClassToBeWeaved" 
    scope="prototype">  
    <property name="injectedBean" ref="injectedBean" /> 
</bean> 

Y la propia clase:

@Configurable 
public class ClassToBeWeaved { 
    private InjectedBean injectedBean; 

    @Required 
    public void setInjectedBean() { ... } 
} 

Editar :

Bueno, resulta que no funcionaba debido a una dependencia circular. Oh, deary me, me encanta trabajar en el código heredado. Aún así, mis preguntas originales permanecen.

+0

qué entorno están ejecutando éste? LTW solo funciona en ciertos servidores de aplicaciones. – skaffman

+0

Corrí mi sandbox justo en eclipse y la aplicación adecuada está en un WAR ejecutándose en JBoss – mikek

+0

¿Qué versión de JBoss está ejecutando y cuál es la línea de comandos de inicio de java para él? Si JBoss es 5.x o superior, no necesita un agente específico (y eso es una diferencia con su entorno limitado, donde debe especificar el agente). –

Respuesta

0

Posiblemente haya olvidado "weave". Agregue -javaagent:path/to/aspectjweaver.jar o -javaagent:path/to/spring-agent.jar a su línea de comandado.

También sugiero que @Autowire su dependencia en lugar de explícitamente inyectarlo.

+0

No, tampoco eso. -javaagent: (...)/spring-agent-2.5.6.jar "está en mi línea de comandos. – mikek

0

Creo que el LTW requiere un META-INF/aop.xml en su classpath. Debe quedar como:

<aspectj> 
    <!-- 
     Uncomment this is you need AOP logging <weaver options="-verbose 
     -showWeaveInfo 
     -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"> 
    --> 
    <weaver> 
     <include within="com.xxx.MyClass" /> 
    </weaver> 
    <aspects> 
     <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/> 
     <include within="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/> 
    </aspects> 
</aspectj> 
+0

Ah no, no lo requiere. Como dije, funciona muy bien en mi caja de arena. – mikek

0

¿Tiene más de 1 archivo XML primavera? Creo que tuve un problema < aop: aspectj-autoproxy /> no estaba en el 'más primario' de mis archivos XML.

+0

Ver mi edicion El error se debió a una dependencia circular en el código (no mío). – mikek

0

Algunas sugerencias para su pregunta.

para hacer el trabajo de tejer tiempo de carga con la primavera, no sólo es necesario configurar adecuadamente el aop.xml, pero es necesario también para tener la primavera-instrument.jar & primavera-aspects.jar.

Estos archivos jar contienen su propio aop.xml que declarar aspectos de la primavera de manejar:

  • @Transactional apoyo
  • @Configurable apoyo
  • apoyo a la traducción Excepción APP
  • @Async anotación para el apoyo programación

¿Qué pasa en el fondo?

Al utilizar AspectJ en tiempo de carga de tejido, los @Transactional y @Configurable implementaciones ya no se basan en proxies JDK o proxies CGLIB pero real AspectJ aspectos.

Para habilitar estos aspectos reales, necesita los archivos jar adicionales. El frasco también contiene la declaración de estos aspectos en su propio aop.xml

Más detalles sobre cómo integrar la primavera con AspectJ here

Cuestiones relacionadas