bizarre :koi:
Version imprimable
bizarre :koi:
l'exemple ici : http://eggsylife.co.uk/category/soft...ing_framework/
genere une erreur qui est la suivante:
Code:
1
2Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
le même soucis avec ça:
j'obtiens :Code:
1
2 @Pointcut("@annotation(com.business.aop.MyAnnotation")
quand j'essaie de mettre une annotation pourrie ou n'existe pas il a l'air de l'interpreter et me dit:Code:
1
2
3Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
donc l'expression est bel et bien interpretée dans tous les cas mais laquelle est la bonne :( ! aucune idée!Code:
1
2
3 Caused by: java.lang.IllegalArgumentException: error Type referred to is not an annotation type: com$business$aop$blabla
si la syntaxe est parallèle à celle des Aspect écrits à la main ("public aspect… ") alors
@annotation est utilisé pour collecter les information de l'annotation utilisée dans le pointcut :
par exemple dans un .aj on écrira quelque chose du genre :
ce qui passera à votre pointcut le paramètre "name" de l'annotation com.business.aop.MyAnnotation et sera appliqué à toutes les fonctions annotées par ladite om.business.aop.MyAnnotation.Code:
1
2 public pointcut myPointcut(String name): execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation(name)) ;
Donc à mon avis, quoique je préfère de loin utiliser des .aj à la place des annotations et ne suis donc pas un spécialiste de cette syntaxe, votre déclaration de @Pointcut est très incomplète : AspectJ ne sait pas où aller chercher ce qu'il doit "binder" au @annotation que vous lui donnez.
bonjour,
mais la syntaxe utilisée dans le pointcut semble être la même qye dans le .aj que vous suggérerer! donc je ne comprends pas pourquoi c'est ignoré!
je crois que vous avez raté le début :)!
en effet j'ai aussi essayé ces expressions mais ça ne marche pas ! ai-je loupé un truc dans la syntaxe?
votre aide sera plus que bienvenue franchement!
le call est une primitive pas supporté je pense par Spring AOP la preuve j'ai ce message d'erreur:
ceci pour un pointcut de ce genre:Code:
1
2 Caused by: org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException: Pointcut expression 'anyTaskToPerform()' contains unsupported pointcut primitive 'call'
de même avec el package complet:Code:
1
2 @Pointcut("call(@MyAnnotation* *(..))")
Code:
1
2 @Pointcut("call(@com.business.MyAnnotation* *(..))")
Bon!
je viens d'essayer cette expression mais ca n'arrange pas les choses; elle est bien analysée (commme dab) mais nous avons erreur:
pointant sur la fin de la chaine à savoir: MyAnnotation()Code:
1
2 Caused by: java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'identifier' at character position 157
j'ai essayé d'ajouter l'argument name comme suit:
et la j'ai ça:Code:
1
2 @Pointcut("execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation(name)) ")
Code:
1
2 Caused by: java.lang.IllegalArgumentException: error at ::0 When using @annotation(<annotationType>(<annotationField>)), <annotationField> must be bound
comme ça ?
Code:
1
2
3 @Pointcut("execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation(name)) && arg(name) ")
apparemment c'est "args(name)" avec s
(RTFM: http://static.springsource.org/sprin...rence/aop.html !)
bon je vais essayer !
mais peux tu m'expliquer pourquoi insister sur l'argument dans l'expression dans ce cas précis?
merci
toujours une erreur au niveau de l'expression même en ajoutant args
Code:
1
2
3 Caused by: java.lang.IllegalArgumentException: error at ::0 When using @annotation(<annotationType>(<annotationField>)), <annotationField> must be bound
disons pour le moment j'essaie de faire marcher le pointcut , je viens de supprimer l'attribut name d'ailleurs de mon annotation on peut donc oublier les args .
Cependant je ne comprends pas pourquoi ça ne marche pas!