2013-04-22 5 views
0

Я использую 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

в excecution вы можете указать, какие аннотации вы хотите поймать, например:

@AfterThrowing(pointcut = "execution(@org.aspectj.lang.annotation.Around * com.mycompany.package..* (..))", throwing = "ex") 
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 называется.

Смежные вопросы