AspectJ 定义的通知类型有哪些?

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

在AspectJ中,通知(Advice)是一种特殊的方法,它们在程序执行的特定点被触发。AspectJ定义了五种类型的通知,它们分别是:

Before Advice (前置通知)

Before advice 在连接点(Join Point)执行之前运行,但它不能阻止执行流继续到连接点。它通常用于在方法执行前进行权限检查或日志记录。

@Before("methodPointcut()")
public void beforeAdvice() {
    // 代码逻辑
}

After Returning Advice (后置返回通知)

After returning advice 在连接点正常完成后执行,例如,一个方法正常返回而没有抛出异常时。它常用于修改返回值或进行某些清理工作。

@AfterReturning(pointcut = "methodPointcut()", returning = "result")
public void afterReturningAdvice(Object result) {
    // 代码逻辑
}

After Throwing Advice (异常抛出通知)

After throwing advice 在方法抛出异常退出时执行。这种类型的通知可以用来处理异常或进行补偿措施。

@AfterThrowing(pointcut = "methodPointcut()", throwing = "exception")
public void afterThrowingAdvice(Exception exception) {
    // 代码逻辑
}

After (finally) Advice (最终通知)

After (finally) advice 不管连接点是正常完成还是异常退出都会执行。它通常用于释放资源,如关闭文件或网络连接。

@After("methodPointcut()")
public void afterFinallyAdvice() {
    // 代码逻辑
}

Around Advice (环绕通知)

Around advice 包围一个连接点的执行。它可以在方法调用之前和之后执行,并且可以决定是否继续到连接点或直接返回自己的返回值或抛出异常。环绕通知是最强大的一种通知类型,因为它完全控制了连接点的执行。

@Around("methodPointcut()")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
    // 方法执行前的代码
    Object result = pjp.proceed(); // 继续执行方法
    // 方法执行后的代码
    return result;
}

这些通知类型为AspectJ提供了强大的编程机制,允许开发者在不修改现有代码的情况下,增加额外的行为和逻辑。

最后更新于