对于Java中类的所有实例方法,是否有一个统一的异常处理程序?例如,如果我有类Car
class Car {
public void drive(double miles) {
...
}
public void turnLeft() {
...
}
public void turnRight() {
...
}
}我是否可以添加一个处理程序函数,每次这些方法引发异常时都会调用它?最终目标是以统一的方式记录所有这些异常,即使它们最终被更高级别的堆栈捕获和忽略。
发布于 2022-05-27 02:48:41
将代理扩展到委托汽车。如果car有接口,我们可以使用jdk代理,也可以使用cglib。就像某种框架(Spring.)已经提供了。下面的代码是cglib的一个例子。
class ErrorHandleProxy implements MethodInterceptor {
public Object createProxy(Object target) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(target.getClass());
enhancer.setCallback(this);
enhancer.setClassLoader(target.getClass().getClassLoader());
return enhancer.create();
}
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
Object ret = null;
try {
ret = proxy.invokeSuper(obj, args);
} catch (Exception e) {
/// do logging or rethrow exception
}
return ret;
}
}然后,我们可以用这个代理呼叫car
Car car = new Car();
Car proxy = (Car)new ErrorHandleProxy().createProxy(car);
proxy.xxx发布于 2022-05-26 21:53:24
如果使用spring,则可以使用一个https://www.baeldung.com/exception-handling-for-rest-with-spring类捕获ExceptionMapper类中的所有异常。
如果它是一个普通的应用程序,那么在您的公共静态void中,您可以将您的代码包围在try catch中,以捕获所有异常。
https://stackoverflow.com/questions/72398300
复制相似问题