2012-08-27 17 views
6

Ho la seguente aspetto:Nessun metodo di corrispondenza factory trovati: metodo factory '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);   
    } 

} 

E il seguente codice XML di configurazione:

<?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> 

Quando comincio la mia app, ottengo this:

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

Sono abbastanza sbalordito perché sono abbastanza sicuro che questa configurazione funzionasse bene prima. Inoltre, questo è un progetto Spring Roo, quindi tutta la configurazione dell'aspetto dovrebbe andare bene.

Qualcuno può aiutare per favore?

risposta

3

Questo è probabilmente perché il vostro aspetto non ha compilato per qualsiasi motivo, si può cercare di aggiungere più diagnostico al vostro aspectj plug Weaver e vedere ciò che viene stampato sulla console, in queste righe:

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

Inoltre, dal momento che si utilizza l'aspetto raw, non è necessario utilizzare lo <aop:aspectj-autoproxy/>, che viene utilizzato per attivare Spring AOP.

+0

Sono stato in grado di scoprire perché l'aspetto non era stato compilato grazie al tuo suggerimento. Molte grazie. – balteo

+0

@balteo, puoi specificare qual è stata la risposta al tuo particolare problema? – alfredaday

+1

Il mio aspetto non è stato compilato. Se il tuo non viene compilato, prova la configurazione sopra, vedrai gli errori di compilazione. – balteo

2

Avevo lo stesso messaggio di errore. Ho risolto, cercando in risposta di rozky qui: http://forum.springsource.org/showthread.php?79928-NoSuchMethodError-Aspect-aspectOf%28%29

Per il bene di registrare la risposta, ho copiato qui:

rozky scritto:

Ciao,

I ha avuto lo stesso problema Ho scoperto che la tessitura deve essere abilitata anche per le classi di aspetto nel file aop.xml. Nel tuo caso è (vedi parte evidenziata):

<!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> 

Spero che aiuti.

Problemi correlati