提问人:lapots 提问时间:4/17/2015 最后编辑:Dhanush Gopinathlapots 更新时间:12/11/2019 访问量:6789
创建自定义注释以处理异常
Create custom annotation to handle exceptions
问:
有没有办法创建自己的注释来处理异常?
我的意思是,例如,如果方法抛出一些异常,我想在方法上添加注释,而不是创建块 - 并且不需要使用 .try-catch
try-catch
例如,像这样的东西
public void method() {
try {
perform();
} catch (WorkingException e) {
}
}
@ExceptionCatcher(WorkingException.class)
public void method() {
perform();
}
答:
0赞
Travieso
12/11/2019
#1
AspectJ 非常适合此用例。此代码将用 @ExceptionCatcher 注释的任何方法包装在 try-catch 中,检查引发的异常是否是应该处理的类型(基于@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;
}
}
}
}
评论
throws