我有自定义的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)
伙计们,我做错了什么?
答案 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);
}
}