有没有办法创建自己的注释来处理异常?
我的意思是,例如,如果方法抛出一些异常,而不是创建try-catch
块,我想在方法上添加注释 - 并且它不需要使用try-catch
例如像
这样的东西public void method() {
try {
perform();
} catch (WorkingException e) {
}
}
@ExceptionCatcher(WorkingException.class)
public void method() {
perform();
}
答案 0 :(得分:0)
AspectJ非常适合此用例。这段代码将在try-catch中包装任何用@ExceptionCatcher注释的方法,检查抛出的异常是否应该处理(基于@ExceptionCatcher中定义的类),然后运行自定义逻辑或重新抛出。 >
注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface ExceptionCatcher {
public Class<? extends Throwable>[] exceptions() default {Exception.class};
}
AspectJ建议:
@Aspect
public class ExceptionCatchingAdvice {
@Around("execution(@ExceptionCatcher * *.*(..)) && @annotation(ExceptionCatcher)")
public Object handle(ProceedingJoinPoint pjp, ExceptionCatcher catcher) throws Throwable {
try {
// execute advised code
return pjp.proceed();
}
catch (Throwable e) {
// check exceptions specified in annotation contain thrown exception
if (Arrays.stream(catcher.exceptions())
.anyMatch(klass -> e.getClass().equals(klass))) {
// custom logic goes here
}
// exception wasn't specified, rethrow
else {
throw e;
}
}
}
}