Ответ 1
Вероятно, проблема не в вашем pointcut, а в совете с использованием этого pointcut и использовании параметра, которого нет в pointcut. Просто удалите параметр из совета (ну или добавьте его в pointcut).
У меня в аспектеJ выражение:
@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
Вероятно, проблема не в вашем pointcut, а в совете с использованием этого pointcut и использовании параметра, которого нет в pointcut. Просто удалите параметр из совета (ну или добавьте его в pointcut).
Пост довольно старый, но для полноты изложения я добавляю еще одну причину, если вы используете @Around advice.
Согласно документации Spring AspectJ, первым аргументом совета должен быть ProceedingJoinPoint. Если он отсутствует, вы получите именно это сообщение об исключении. К сожалению, исключение не указывает на совет по ошибке, поэтому устранение ошибки является ударом и промахом.
Я получил эту ошибку из-за неправильного импорта класса. Я должен был импортировать класс org.aspectj.lang.JoinPoint импорта, но вместо этого импортировал другой класс Joinpoint из другого пакета.
Это была Joinpoint (строчная буква p)
org.aopalliance.intercept.Joinpoint;
Изменить на JointPoint ("P прописными буквами)
org.aspectj.lang.JoinPoint;
У меня также была эта проблема, и в моем случае это был неправильный импорт из: org.aopalliance.intercept.Joinpoint;
Это должно быть: org.aspectj.lang.JoinPoint;
Иногда причиной может быть это.
public void afterReturning(JoinPoint joinPoint, Object result)
Просто удалите Object result
как показано ниже, и он работает для меня.
public void afterReturning(JoinPoint joinPoint)
Если вы используете конфигурацию на основе 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, не соответствуют фактическому методу, возникает эта ошибка.
Это не ваш ответ, но, возможно, это немного вам поможет.
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();
Формальное исключение в исключении pointcut также происходит для двух резонов в 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
Я получаю ту же ошибку, в моем сценарии я использовал два параметра метода
public void methodName(JoinPoint joinPoint ,HttpServletRequest request) throws
и моя аннотация была как
@Before("execution(public * com.java.controller.*Controller.*(..))")
В качестве решения я добавил
арг (запрос,..)
@Before("execution(public * com.java.controller.*Controller.*(..)) && args(request,..)")
проблема есть Когда вы написали свой совет с "Joinpoint", пожалуйста, убедитесь, что он