AspectJ的表达式给出切入点误差正式绑定(AspectJ expression gives fo

2019-07-31 08:12发布

我有内AspectJ的表达式:

@Pointcut("within(com.param.cpms.dao.impl.ProjectMetaDaoImpl)")
public void daoExceptionHandle() {

}

春季3.0启动时,我收到以下错误

nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut

Answer 1:

也许这个问题是不是在你的切入点,但在建议使用切入点和使用不中的切入点存在的参数。 单从建议删除参数(井,或者将其添加到切入点)。



Answer 2:

该职位是比较老了,但为了完整起见,我加入了另外一个原因,如果你使用@Around建议。

根据春天的AspectJ文件建议的第一个参数必须是ProceedingJoinPoint。 如果它丢失,您将获得正是这种异常消息。 可悲的是,除了没有指向建议在错误以解决这个bug是一个打了小姐。



Answer 3:

我因为类的错误进口的这个错误。 我应该进口进口一个org.aspectj.lang.JoinPoint类,而是进口了一些其他的连接点类从不同的包。



Answer 4:

它是连接点(“P小写)

org.aopalliance.intercept.Joinpoint;

更改为JointPoint(“P大写)

org.aspectj.lang.JoinPoint; 


Answer 5:

我也有这个问题,在我的情况下,它是从一个错误的导入: org.aopalliance.intercept.Joinpoint;

它需要: org.aspectj.lang.JoinPoint;



Answer 6:

有时,原因可能是这一点。

 public void afterReturning(JoinPoint joinPoint, Object result)

只是删除Object result如下,它为我工作。

public void afterReturning(JoinPoint joinPoint)


Answer 7:

如果您使用的是基于XML的配置,如果你的配置是这样的:

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

然后,在2种情况,你所得到的错误:

  1. 如果在切入点表达式,即方法显示器()在我们的情况下,如果没有任何参数和实际的类中定义的方法具有一些参数。
  2. 如果在之前的建议,即AOP:之前,方法=“之前”不ARG-名称和实际的咨询类定义,“之前”的方法有一些参数。

最终,当XML不匹配的实际方法定义的方法的参数,那么这个错误会来的。



Answer 8:

这不回答,但可能它会帮助你一点点。

Spring AOP的教程 ,你可以参考本教程

@Before("execution(* com.de.controller..*(..))")
public void beforeLoggerAdvice(JoinPoint joinPoint, WebRequest request) {
    DeUtil.looger.info("--working");
}

我得到了同样的异常,但因为的WebRequest的,我删除和使用可替代

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();


Answer 9:

在切入点例外正式绑定也发生在AOP 2个resons。

原因1:如果没有return语句返回中的意见后,

对于基于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>

对于基于注解实现

@AfterReturning(  
              pointcut = "execution(* Operation.*(..))",  
              returning= "result") //Make sure returning result is added

原因2:如果没有扔扔意见后

对于基于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> 

对于基于注解实现

@AfterThrowing(  
              pointcut = "execution(* Operation.*(..))",  
              throwing= "error")  //Make sure throwing error is added


Answer 10:

我得到了同样的错误,在我的方案,我用两个方法参数

public void methodName(JoinPoint joinPoint ,HttpServletRequest request) throws

我的注释很喜欢

@Before("execution(public * com.java.controller.*Controller.*(..))")

作为解决方案我已经加入

ARGS(请求,..)

@Before("execution(public * com.java.controller.*Controller.*(..)) && args(request,..)")


文章来源: AspectJ expression gives formal unbound in pointcut error