java类中多个方法的单个Catch块

java类中多个方法的单个Catch块,java,class,optimization,exception-handling,Java,Class,Optimization,Exception Handling,我有一个带有静态方法的类来处理MemCache请求,它有不同的方法和不同的参数 每当在该类中调用某个方法时,我想递增totalRequest计数器,如果类中的任何方法发生异常,我想递增一个失败的计数器。有什么办法吗 如果自然界中的静态存在一些问题,请告诉我?而且它应该是一个有效的方法。我会使用AOP。如果您使用或Maven,它很容易在您的bean周围放置到位。您将声明一个拦截器,Guice或Maven将围绕您的方法进行包装 还有,但我从来没有用过 最后,您可以将调用封装在调用方方法中。有了Jav

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

每当在该类中调用某个方法时,我想递增totalRequest计数器,如果类中的任何方法发生异常,我想递增一个失败的计数器。有什么办法吗


如果自然界中的静态存在一些问题,请告诉我?而且它应该是一个有效的方法。

我会使用AOP。如果您使用或Maven,它很容易在您的bean周围放置到位。您将声明一个拦截器,Guice或Maven将围绕您的方法进行包装

还有,但我从来没有用过

最后,您可以将调用封装在调用方方法中。有了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()});
}
protected T callWithTrace(供应商fn)引发异常{
//通话前的一些代码
试一试{
T输出=fn.get();
//正常执行后的代码
返回输出;
}
捕获(例外e){
//错误情况下的代码(增加计数器??)
投掷e;
}
}
void someOtherMethod(){
Object ret=callWithTrace({()->callToYourDangerousMethod()});
Object ret=callWithTrace({()->callToAnotherDangerMethod()});
}

在Java7中,您也可以使用匿名内部类,但这很难阅读。

我会使用AOP。如果您使用或Maven,它很容易在您的bean周围放置到位。您将声明一个拦截器,Guice或Maven将围绕您的方法进行包装

还有,但我从来没有用过

最后,您可以将调用封装在调用方方法中。有了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()});
}
protected T callWithTrace(供应商fn)引发异常{
//通话前的一些代码
试一试{
T输出=fn.get();
//正常执行后的代码
返回输出;
}
捕获(例外e){
//错误情况下的代码(增加计数器??)
投掷e;
}
}
void someOtherMethod(){
Object ret=callWithTrace({()->callToYourDangerousMethod()});
Object ret=callWithTrace({()->callToAnotherDangerMethod()});
}

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

感谢您的回复,您能否提供一些关于AOP的链接,如何通过一个简单的示例实现这一点,哪一个更适合实际项目?我已经阅读了该链接,它非常有用,因为我正在处理一个实际项目,实现Guice将是一项非常昂贵的任务,可能我现在无法使用它!还有别的办法吗?可能是一些设计模式,我可以实现没有太多的依赖性的变化,增加了一个lambda解决方案谢谢你的回答,你能提供一些关于AOP的链接,如何实现这一点,一个简单的例子,哪一个更适合于真正的项目?我读了链接,这是非常有帮助的,因为我正在从事一个真正的项目,实现Guice将是一项非常昂贵的任务,可能我现在无法使用它!还有别的办法吗?可能是一些设计模式,我可以实现没有太多的依赖性的变化,增加了一个lambda解决方案