面向方面编程的异常处理
Exception handling with aspect oriented programming
我是面向方面编程的新手。我正在使用 AspectJ 开发 spring-boot 应用程序,它已经具有如下异常处理方面:
@Aspect
@Order(0)
public class ExceptionAspect {
public ExceptionAspect() {
}
@Pointcut("within(com.mycom.service.impl..*)")
public void applicationServicePointcut() {
}
@AfterThrowing(
pointcut = "applicationServicePointcut()",
throwing = "e"
)
public void translate(JoinPoint joinPoint, Throwable e) {
...
//EXCEPTION HANDLING LOGIC
}
}
现在我想再添加一个方面,比如 NewAspect
对于与上面提到的相同的切入点,即
"within(com.mycom.service.impl..*)"
此外,我希望 NewAspect
中发生的任何异常都由 ExceptionAspect
处理。
对此,我无法理解,新的方面的Order
是否应该超过现有的ExceptionAspect
。
@Order
注释或实现 @Ordered
接口是 Spring 特定的,因此只对 Spring 管理的组件有影响。 AspectJ 是独立于 Spring 的产品。它有自己的声明和处理优先级的方式:
在 AspectJ programming guide 中搜索一般术语“优先级”,特别是 declare precedence
语句。
虽然前面的文档解释了基础知识以及如何在本机 AspectJ 语法中声明优先级,但请在 AspectJ 5 developer's notebook 中搜索 @DeclarePrecedence
以了解注释语法备选方案。
P.S.: 我问你是使用本机 AspectJ 还是 Spring AOP,因为顺序注释,也因为在 Spring AOP 中,一个方面不能建议另一个。所以你想要的首先只能在本机 AspectJ 中实现。
我是面向方面编程的新手。我正在使用 AspectJ 开发 spring-boot 应用程序,它已经具有如下异常处理方面:
@Aspect
@Order(0)
public class ExceptionAspect {
public ExceptionAspect() {
}
@Pointcut("within(com.mycom.service.impl..*)")
public void applicationServicePointcut() {
}
@AfterThrowing(
pointcut = "applicationServicePointcut()",
throwing = "e"
)
public void translate(JoinPoint joinPoint, Throwable e) {
...
//EXCEPTION HANDLING LOGIC
}
}
现在我想再添加一个方面,比如 NewAspect
对于与上面提到的相同的切入点,即
"within(com.mycom.service.impl..*)"
此外,我希望 NewAspect
中发生的任何异常都由 ExceptionAspect
处理。
对此,我无法理解,新的方面的Order
是否应该超过现有的ExceptionAspect
。
@Order
注释或实现 @Ordered
接口是 Spring 特定的,因此只对 Spring 管理的组件有影响。 AspectJ 是独立于 Spring 的产品。它有自己的声明和处理优先级的方式:
在 AspectJ programming guide 中搜索一般术语“优先级”,特别是
declare precedence
语句。虽然前面的文档解释了基础知识以及如何在本机 AspectJ 语法中声明优先级,但请在 AspectJ 5 developer's notebook 中搜索
@DeclarePrecedence
以了解注释语法备选方案。
P.S.: 我问你是使用本机 AspectJ 还是 Spring AOP,因为顺序注释,也因为在 Spring AOP 中,一个方面不能建议另一个。所以你想要的首先只能在本机 AspectJ 中实现。