J'ai dans aspectJ l'expression:
@Pointcut("within(com.param.cpms.dao.impl.ProjectMetaDaoImpl)")
public void daoExceptionHandle() {
}
À Spring 3.0 startup, je reçois l’erreur suivante:
nested exception is Java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
Le problème ne réside probablement pas dans votre point de coupe, mais dans un conseil utilisant ce point de coupe et un paramètre qui n'existe pas dans le point de coupe. Supprimez simplement le paramètre du conseil (ou ajoutez-le à la découpe du point).
La publication est plutôt ancienne, mais par souci d’exhaustivité, j’ajoute une autre raison, si vous utilisez les conseils @Around.
Selon la documentation Spring AspectJ le premier argument de l'avis doit être ProceedingJoinPoint. S'il manque, vous obtiendrez exactement ce message d'exception. Malheureusement, l’exception ne renvoie pas à des conseils erronés. Résoudre le bogue est donc un jeu de hasard.
J'ai eu cette erreur à cause d'une mauvaise importation de classe. J'aurais dû importer la classe d'importation org.aspectj.lang.JoinPoint, mais au lieu de cela, j'ai importé une autre classe Joinpoint à partir d'un autre package.
C'était Joinpoint ("p minuscule)
org.aopalliance.intercept.Joinpoint;
Changer en JointPoint ("majuscule)
org.aspectj.lang.JoinPoint;
J'ai également eu ce problème, et dans mon cas, il s'agissait d'une importation incorrecte à partir de: org.aopalliance.intercept.Joinpoint;
Il doit être: org.aspectj.lang.JoinPoint;
Si vous utilisez une configuration basée sur XML et si votre configuration ressemble à ceci:
<aop:config>
<aop:aspect ref="bAdvice">
<aop:pointcut id="displayPointcut" expression="execution(* com.example.demo.BusinessClass.display())"/>
<aop:before method="before" pointcut-ref="displayPointcut" />
</aop:aspect>
</aop:config>
Ensuite, dans 2 scénarios, vous obtenez l'erreur:
En fin de compte, lorsque les paramètres de méthode définis dans XML ne correspondent pas à la méthode réelle, cette erreur se produit.
Ce n'est pas votre réponse, mais peut-être que cela vous aidera un peu.
Tutoriel Spring AOP vous pouvez consulter ce tutoriel
@Before("execution(* com.de.controller..*(..))")
public void beforeLoggerAdvice(JoinPoint joinPoint, WebRequest request) {
DeUtil.looger.info("--working");
}
J'ai eu la même exception mais à cause de WebRequest , j'ai supprimé cela et en utilisant l'alternative
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
Parfois, la raison pourrait être la suivante.
public void afterReturning(JoinPoint joinPoint, Object result)
Supprimez simplement Object result
comme ci-dessous et cela fonctionne pour moi.
public void afterReturning(JoinPoint joinPoint)
J'avais la même erreur, dans mon scénario, j'utilisais deux paramètres de méthode
public void methodName(JoinPoint joinPoint ,HttpServletRequest request) throws
et mon annotation était comme
@Before("execution(public * com.Java.controller.*Controller.*(..))")
En tant que solution, j'ai ajouté
args (demande, ..)
@Before("execution(public * com.Java.controller.*Controller.*(..)) && args(request,..)")
L'exception formelle non liée dans la suppression de point se produit également pour deux résolutions dans AOP.
Raison n ° 1: S'il n'y a aucune instruction de retour dans après avoir renvoyé un avis
Pour une implémentation basée sur XML
<aop:aspect id="myaspect" ref="trackAspect">
<aop:pointcut id="pointCutAfterReturning" expression="execution(* com.springlearn.Operation.*(..))" />
<aop:after-returning method="myAdvice" returning="result" pointcut-ref="pointCutAfterReturning"/> //Make sure returning result is added
</aop:aspect>
Pour l'implémentation basée sur l'annotation
@AfterReturning(
pointcut = "execution(* Operation.*(..))",
returning= "result") //Make sure returning result is added
Raison 2: S'il n'y a pas de jeté Après avoir jeté un conseil
Pour une implémentation basée sur XML
<aop:aspect id="myaspect" ref="trackAspect" >
<!-- @AfterThrowing -->
<aop:pointcut id="pointCutAfterThrowing" expression="execution(* com.javatpoint.Operation.*(..))" />
<aop:after-throwing method="myadvice" throwing="error" pointcut-ref="pointCutAfterThrowing" /> //Make sure throwing error is added
</aop:aspect>
Pour l'implémentation basée sur des annotations
@AfterThrowing(
pointcut = "execution(* Operation.*(..))",
throwing= "error") //Make sure throwing error is added