2010-07-29 12 views
1

Je le code ci-dessous dans ma classe LoggingAspect et je suis attendre à ce que courir pour mes méthodes commeMon @Around conseils n'est pas appelé à toutes les méthodes dans le paquet

gov.ssa.rome.service. impl.save() gov.ssa.rome.dao.impl.save()

mais il ne s'exécute qu'une seule fois quoi qu'il arrive. je ne sais pas pourquoi. J'ai utilisé autowire pour câbler dao à la couche de service. J'apprécie vraiment votre aide.

Que dois-je faire pour que cette méthode s'exécute pour tous mes flux d'applications afin de voir le flux dans les journaux?

@Around("execution(* gov.ssa.rome..*.*(..))") 
public Object log(ProceedingJoinPoint pjp) throws Throwable { 

System.out.println("aspect Around started"); 

     Object ret = pjp.proceed(); 

    System.out.println("aspect Around ended); 

    return ret; 
} 

Répondre

2

Des aspects peuvent être créés en utilisant différentes technologies. Si les vôtres sont des proxies JDK, ils ne fonctionneront que pour les méthodes définies dans une interface. Si ce sont des proxies cglib, ils fonctionneront pour toutes les méthodes, sauf les dernières. Je pense que le ressort utilisera par défaut le proxy JDK si la classe correspondante implémente une interface et le proxy cglib sinon.

Vérifiez à quoi ressemble votre classe avec la méthode de sauvegarde et si la sauvegarde provient d'une interface. Vous pouvez appliquer des proxies aspectjweaver pour que tout fonctionne, mais ils nécessitent une manipulation de bytecode. Je recommande de rester sur les proxies JDK et de créer/étendre des interfaces si nécessaire. Reportez-vous au chapitre Documentation AOP du ressort pour plus d'informations.