【发布时间】:2015-03-31 04:03:04
【问题描述】:
我有一个通过 JPA 使用 Spring + Hibernate 的 webapp,Spring 有效地将所有持久性异常转换为 DataAccessException 的变体。
我现在正试图在这样的 AOP 切入点中捕获这些 DataAccessExceptions:
@Aspect
public class AspectException {
@AfterThrowing(pointcut = "within(com.mypackage.dao..*)", throwing = "error")
public void catchException(Throwable error) {
MyOwnException e = new MyOwnException("ERROR!", error);
throw e;
}
}
现在,如果在我的 DAO 中抛出自定义异常,则此方面有效,但不适用于 Spring 的 DataAccessExceptions!
知道为什么会这样吗?
【问题讨论】:
-
实际上,我很难相信这应该适用于一种类型的异常而不适用于另一种类型,除非您的建议参数没有像您的示例中那样键入
Throwable而是特定的子类型与DataAccessException不匹配。甚至Spring manual 也提到DataAccessException作为@AfterThrowing的工作示例。