类java中的多个方法的单个捕获块

时间:2015-09-30 08:05:43

标签: java class optimization exception-handling

我有一个用于处理MemCache请求的静态方法的类,它有不同的方法和不同的参数。

每当在该类中调用Some方法时,我想增加totalRequest Counter,如果在类中的任何方法中发生异常,我想增加失败的计数器。有没有办法做到这一点?

如果静态自然有一些问题,请告诉我?它应该是一个有效的。

1 个答案:

答案 0 :(得分:4)

我会使用AOP。如果您使用Guice或Maven,那么很容易在您的bean周围放置。你将声明一个拦截器,Guice或Maven将包裹你的方法。

还有AspectJ,但我从未使用过它。

最后,您可以使用调用方法包装您的调用。使用Java 8和lambda,它将是这样的:

protected <T> T callWithTrace(Supplier<T> fn) throws Exception {
  //some code before the call
  try {
     T output=fn.get();
     //code after normal exec
     return output;
  }
  catch(Exception e) {
     //code in case of error (increase counter??)
     throw e;
  }
}

void someOtherMethod() {
   Object ret = callWithTrace({ () -> callToYourDangerousMethod()});
   Object ret = callWithTrace({ () -> callToAnotherDangerousMethod()});
}

使用Java 7,您也可以使用匿名内部类来完成它,但它很难阅读。