gpt4 book ai didi

java - 切入点与继承的混淆

转载 作者:行者123 更新时间:2023-12-02 07:46:27 25 4
gpt4 key购买 nike

我对编写一个与方法的所有执行相匹配的切入点感到困惑。我尝试了应该匹配 Alpha 类的所有方法执行的切入点:

execution(* Alpha.*(..))

具有以下类层次结构

public class Alpha {
public void alphaMethod() {...}
}
public class Beta extends Alpha {
public void betaMethod() {
alphaMethod();
}
}

如果主程序在 Beta 实例上调用 alphaMethod,我的建议将按预期调用,但主程序会调用 betaMethod还在我的建议中调用 alphaMethod 未调用,我不明白为什么。

方面定义:

@Aspect
public class MyAspect {
@Before(value = "execution(* Alpha.*(..))", argNames="joinPoint")
public void myAdvice(JoinPoint joinPoint) {
System.out.println("BEFORE: " + joinPoint.getSignature());
}
}

主要方法:

Beta beta = ...;
beta.alphaMethod(); //advice is called
beta.betaMethod(); //advice is NOT called.

最佳答案

这是预期的。

Spring AOP 使用代理类来包装建议的 bean。当您从 Beta 方法中调用 alphaMethod() 时,代理甚至不会意识到这一点。

参见this回答以获取更多信息。

关于java - 切入点与继承的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com