2012-08-27 12 views
6

tengo el siguiente aspecto:Ningún método de fábrica concordante: método de fábrica 'aspectOf()'

package trc.suivi.aspects; 

import java.util.Date; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 

import trc.suivi.domain.EvenementPli; 
import trc.suivi.domain.Pli; 
import trc.suivi.domain.TypeEvenement; 
import trc.suivi.repository.EvenementPliRepository; 

public aspect PliEventManagerAspect { 

    private static final Logger log = Logger.getLogger(PliEventManagerAspect.class); 

    @Autowired 
    private EvenementPliRepository evenementPliRepository; 

    public PliEventManagerAspect() { 
    } 

    pointcut catchEMPersist(Pli pli) : (execution(* trc.suivi.repository.PliRepository+.save(*)) && args(pli)); 
    pointcut catchEMPersist() : (execution(trc.suivi.domain.Pli.persist())); 

    after(Pli pli) returning: catchEMPersist(pli) { 
     log.debug("catchEMPersist(pli)"); 
     EvenementPli ev = new EvenementPli(); 
     ev.setDateCreation(new Date()); 
     ev.setType(TypeEvenement.creation); 
     ev.setMessage("Création d'un pli"); 
     evenementPliRepository.save(ev);   
    } 

    after() returning: catchEMPersist() { 
     log.debug("catchEMPersist()"); 
     EvenementPli ev = new EvenementPli(); 
     ev.setDateCreation(new Date()); 
     ev.setType(TypeEvenement.creation); 
     ev.setMessage("Création d'un pli"); 
     evenementPliRepository.save(ev);   
    } 

} 

Y la siguiente configuración xml:

<?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:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> 
    <aop:aspectj-autoproxy /> 
    <bean class="trc.suivi.aspects.PliEventManagerAspect" factory-method="aspectOf"/> 
</beans> 

Cuando empiezo mi aplicación, me sale esto:

No matching factory method found: factory method 'aspectOf()'. Check that a method with the specified name exists and that it is static. 

Estoy bastante estupefacto ya que estoy bastante seguro de que esta configuración funcionó bien antes. Además, se trata de un proyecto de Spring Roo, por lo que todas las configuraciones de aspectJ deberían estar bien.

¿Alguien puede ayudarnos?

Respuesta

3

Esto es probablemente debido a que su aspecto no ha compilado por cualquier razón, se puede tratar de añadir más de diagnóstico para su aspectj plugin de tejedor y ver lo que se imprime en la consola, a lo largo de estas líneas:

<configuration> 
    <outxml>true</outxml> 
    <showWeaveInfo>false</showWeaveInfo> 
    <Xlint>warning</Xlint> 
    <verbose>true</verbose> 
       ... 
</configuration> 

Además, dado que está utilizando Raw Lookj, realmente no necesita usar <aop:aspectj-autoproxy/> que se utiliza para activar Spring AOP.

+0

Pude averiguar por qué el aspecto no se había compilado gracias a su sugerencia. Muchas gracias. – balteo

+0

@balteo, ¿puede especificar cuál fue la respuesta a su problema en particular? – alfredaday

+1

Mi aspecto no se había compilado. Si el tuyo no se compila, prueba la configuración anterior, verás los errores de compilación. – balteo

2

Me estaba saliendo el mismo mensaje de error. Lo resuelto examinado la respuesta de rozky aquí: http://forum.springsource.org/showthread.php?79928-NoSuchMethodError-Aspect-aspectOf%28%29

En aras de la grabación de la respuesta, he copiado aquí:

rozky escribí:

Hola,

I tuvo el mismo problema Descubrí que el tejido debe habilitarse también para las clases de aspecto en el archivo aop.xml. En su caso es (vea la parte resaltada):

<!DOCTYPE aspectj PUBLIC 
     "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 
<aspectj> 
    <weaver options="-verbose -showWeaveInfo -debug"> 
     <!-- only weave classes in our application-specific packages --> 
     <include within="com.mypackage.*"/> 
     <include within="foo.*"/> <!-- this is the highlighted line --> 
    </weaver> 
    <aspects> 
     <!-- weave in just this aspect --> 
     <aspect name="foo.ProfilingAspect"/> 
    </aspects> 
</aspectj> 

Espero que ayude.

Cuestiones relacionadas