我有 aspectJ 表达式:
@Pointcut("within(com.param.cpms.dao.impl.ProjectMetaDaoImpl)")
public void daoExceptionHandle() {
}
在 Spring 3.0 启动时,我收到以下错误:
nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
答案 0 :(得分:23)
可能问题不在于您的切入点,而在于使用该切入点并使用切入点中不存在的参数的建议。只需从建议中删除参数(好吧,或将其添加到切入点)。
答案 1 :(得分:6)
该帖子相当陈旧,但为了完整起见,我提出另一个原因,如果你使用@Around建议。
根据Spring AspectJ documentation,建议的第一个参数必须是ProceedingJoinPoint。如果它丢失了,您将收到此异常消息。可悲的是,这个例外并没有指出错误的建议,所以解决这个错误就是一次又一次。
答案 2 :(得分:5)
由于错误导入了类,我收到了此错误。我应该导入导入org.aspectj.lang.JoinPoint类,而是从其他包导入一些其他Joinpoint类。
答案 3 :(得分:4)
是Joinpoint(" p小写)
org.aopalliance.intercept.Joinpoint;
更改为JointPoint(" P大写)
org.aspectj.lang.JoinPoint;
答案 4 :(得分:2)
我也有这个问题,在我的情况下,这是一个错误的导入:org.aopalliance.intercept.Joinpoint;
需要:org.aspectj.lang.JoinPoint;
答案 5 :(得分:2)
有时候原因可能是这样。
public void afterReturning(JoinPoint joinPoint, Object result)
只需如下删除Object result
,它对我有用。
public void afterReturning(JoinPoint joinPoint)
答案 6 :(得分:1)
如果您使用的是基于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个场景中,您收到错误:
最终,当XML中定义的方法参数与实际方法不匹配时,将出现此错误。
答案 7 :(得分:1)
这不是你的答案,但可能对你有所帮助。
Spring AOP Tutorial您可以参考本教程
@Before("execution(* com.de.controller..*(..))")
public void beforeLoggerAdvice(JoinPoint joinPoint, WebRequest request) {
DeUtil.looger.info("--working");
}
我得到了相同的例外但由于 WebRequest ,我删除了它并使用了替代
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
答案 8 :(得分:0)
AOP中的两个共振点也会发生正式的未约束切入点异常。
原因1:如果在返回建议后中没有返回声明
用于基于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
答案 9 :(得分:0)
我遇到了同样的错误,在我的场景中,我使用的是两个方法参数
public void methodName(JoinPoint joinPoint ,HttpServletRequest request) throws
我的注释就像
@Before("execution(public * com.java.controller.*Controller.*(..))")
作为我添加的解决方案
args(request,..)
@Before("execution(public * com.java.controller.*Controller.*(..)) && args(request,..)")