J'expérimente avec AspectJ Load-time Weaving au printemps comme décrit here. J'ai vérifié le sample code, et cela fonctionne comme annoncé.AspectJ Temps de chargement au printemps avec des coupes de points d'appel de méthode?
Mais lorsque j'essaie de changer le pointcut de la sémantique de execution(..)
à call(..)
, le conseil n'est plus exécuté.
Je sais que Spring AOP ne prend pas en charge la sémantique call(..)
, mais cela ne devrait pas s'appliquer ici puisque j'utilise AspectJ LTW (l'exemple de code fonctionne avec succès avec des objets non gérés par Spring).
Quelqu'un peut-il apporter de la lumière?
Mise à jour: Afin de confirmer que fonctionne LTW, j'ai ajouté les propriétés système suivantes à la configuration argline dans pom.xml:
-Dorg.aspectj.weaver.showWeaveInfo=true
-Daj.weaving.verbose=true
-Dorg.aspectj.tracing.enabled=true
-Dorg.aspectj.tracing.factory=default
-Dorg.aspectj.tracing.file=/tmp/aspectj-trace.txt
Maintenant, la sortie en cours d'exécution mvn test
contient les lignes suivantes:.
[AppClassLoader] info AspectJ Weaver Version 1.5.3 built on Wednesday Nov 22, 2006 at 11:18:15 GMT
[AppClassLoader] info register classloader [email protected]
[AppClassLoader] info using configuration
/private/tmp/aspectj-load-time-weaving/target/test-classes/META-INF/aop.xml
[AppClassLoader] info register aspect org.springbyexample.aspectjLoadTimeWeaving.PerformanceAdvice
[AppClassLoader] weaveinfo Join point
'method-execution(void org.springbyexample.aspectjLoadTimeWeaving.Processor.process())'
in Type 'org.springbyexample.aspectjLoadTimeWeaving.Processor' (Processor.java:38)
advised by around advice from
'org.springbyexample.aspectjLoadTimeWeaving.PerformanceAdvice' (PerformanceAdvice.java)
[AppClassLoader] weaveinfo Join point
'method-execution(void org.springbyexample.aspectjLoadTimeWeaving.
PerformanceAdvice.aspectjLoadTimeWeavingExamples())'
in Type 'org.springbyexample.aspectjLoadTimeWeaving.PerformanceAdvice' (PerformanceAdvice.java:37)
advised by around advice from
'org.springbyexample.aspectjLoadTimeWeaving.PerformanceAdvice' (PerformanceAdvice.java)
Il semble donc que AspectJ a repris le PerformanceAdvice et a trouvé 2 points de jonction pour tisser dans Mais si je remplace execution(..)
avec call(..)
dans le point de jointure de PerformanceAdvice et exécutez à nouveau maven, la sortie ne contient pas ces 2 dernières lignes et le conseil n'est pas exécuté. La trace AspectJ contient beaucoup d'instructions de journal, mais je ne pouvais pas faire grand-chose. Je l'ai scanné pour des erreurs ou des avertissements, mais n'en ai trouvé aucun.
(je suppose que je devrais être en mesure de remplacer simplement execution(..)
avec call(..)
, parce que leur syntaxe est décrite comme execution(MethodPattern)
et call(MethodPattern)
respectivement dans le AspectJ programming guide).
J'ai également essayé d'utiliser une version plus récente d'AspectJ (1.6.6), mais en vain.
Oui, l'agent est configuré dans le POM Maven (voir ci-dessous). Comme je peux conseiller avec succès des objets non gérés par Spring, AspectJ semble fonctionner. http://svn.springbyexample.org/core/aspectj-load-time-weaving/tags/1.0/pom.xml –