如果在方法调用中应忽略异常,则将编写例如以下内容:
public void addEntryIfPresent(String key, Dto dto) {
try {
Map<String, Object> row = database.queryForMap(key);
dto.entry.put(row);
} catch (EmptyResultDataAccessException e) {}
}
我正在尝试编写具有相同效果的自定义spring
注释,但是可以仅将其应用于方法标头。看起来可能类似于以下内容:
@IgnoreException(EmptyResultDataAccessException.class) //this annotation does not exist
public void addEntryIfPresent(String key, Dto dto) {
Map<String, Object> row = database.queryForMap(key);
dto.entry.put(row);
}
如何创建这样的注释?
答案 0 :(得分:3)
这是使用 AspectJ 的一种方法。
首先,定义一个方法级别的注释。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface IgnoreRuntimeException{
}
然后,为注释定义一个 around 方面。
@Component
@Aspect
public class ExceptionHandlingAdvice {
@Around("@annotation(com.yourpackage.IgnoreRuntimeException) && execution(* *(..))")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
Object returnObject = null;
// do something before the invocation
try {
// invoke method
returnObject = joinPoint.proceed();
// do something with the returned object
return returnObject;
} catch (Exception e) {
// do something with the exception
}
}
}
然后您可以在方法顶部应用注释以忽略异常。
@IgnoreRuntimeException
public void addEntryIfPresent(String key, Dto dto) {
// ...
}
您还可以使用ProceedingJoinPoint
的api检查批注的参数,以仅忽略您要忽略的异常。