使用aop处理异常

时间:2013-04-22 07:33:57

标签: spring spring-aop

我正在使用带有服装注释的AOP,为方法添加计时器。

  @Around(value = "@annotation(benchmark)")
  public void func(final ProceedingJoinPoint joinPoint, final Benchmark benchmark) throws Throwable {
       //wrap the call to the method with timer
       final long t0 = System.currentTimeMillis();
       logger.error(t0 + " ");
       joinPoint.proceed();
       final long elapsed = (System.currentTimeMillis() - t0);
       logger.error(elapsed + " ");
  }

我希望能够在带注释的方法中抛出异常时执行某些操作。 我不确定什么是正确的方式......

我读到并看到有:

@AfterThrowing(pointcut = "execution(* com.mycompany.package..* (..))", throwing = "ex")

据我所知@AfterThrowing没有给我我想要的东西,我只需要以某种方式来缓存异常,而不是用基准注释注释的方法。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

在执行中,您可以指定要捕获的注释,例如:

@AfterThrowing(pointcut = "execution(@org.aspectj.lang.annotation.Around * com.mycompany.package..* (..))", throwing = "ex")

答案 1 :(得分:0)

<aop:config>
        <aop:aspect id="testInterceptor" ref="testid">
            <aop:pointcut expression="execution(* com.mycompany.package..* (..))"
                id="pointcutid" />

            <aop:after-throwing pointcut-ref="pointcutid"
                throwing="err" method="func" />


        </aop:aspect>
    </aop:config>


<bean id="testid" class="com.XXX.XXX.ClassNameHavingfuncMethod">  </bean>

当从com.mycompany.package类方法抛出错误时,将调用func方法。