正确的AspectJ切入点表达式

时间:2013-06-03 09:02:45

标签: java spring aspectj

我有自定义的JodaJdbcTemplate类。可以执行查询的是简单的queryImpl。

例如

jodaJdbcTemplate.update("INSERT INTO bla bla...");

每次执行此方法时,我都需要捕获特定的异常( DeadlockLoserDataAccessException )。

我写了Aspect类并且有这样的方面配置:

@Around("execution( * org.springframework.jdbc.core.JodaJdbcTemplate (..))")

获取例外

java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.aspectj.weaver.tools.PointcutParser.resolvePointcutExpression(PointcutParser.java:317)
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:295)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:208)

伙计们,我做错了什么?

3 个答案:

答案 0 :(得分:1)

我已经重新检查了它,并且切入点execution(* org.springframework.jdbc.core.JodaJdbcTemplate.*(..))将围绕此类的每个方法运行,如果这是您想要的。 现在,如果您想捕获异常,那么您应该考虑@AfterThrowing。 我用spring-aop-3.2.2.RELEASE运行,所以我可以发送它,如果它仍然不适合你...

答案 1 :(得分:0)

尝试从“执行(*” - >“执行(*”)中删除空格。 否则它对我来说很好。

答案 2 :(得分:0)

@Aspect
public class LoggingAspect {

   @AfterThrowing(
  pointcut = "execution( * org.springframework.jdbc.core.JodaJdbcTemplate.update(..))",
  throwing= "error")
    public void logAfterThrowing(JoinPoint joinPoint, Throwable error) {
    System.out.println("Exception : " + error);
    }
}