【发布时间】:2019-05-11 16:13:54
【问题描述】:
我想在返回值后拦截方法。
该方法是接口上的默认方法,我希望返回默认 intf 实现的值,并覆盖具体类中的实现。
这是我的方面:
@Aspect
@Configuration
public class ResAspect {
@AfterReturning(pointcut = "within(org.my.app.Strategy+) && execution(* shouldEnter(..))", returning = "res")
public void shouldOperate(JoinPoint jp, boolean res) {
System.out.println();
}
}
这是默认方法:
default boolean shouldEnter(int i, Rec r) {
return !evaluate(i, r);
}
你可以猜到它不起作用。那么我可以用 Spring AOP 实现我想要的吗?
我可以访问实现类实例及其在方面内的属性吗?
编辑:我要拦截的接口位于另一个模块中
【问题讨论】:
-
对于您的第一个问题,您想访问接口中默认方法及其覆盖版本的结果吗?如果是这样,我能想到的唯一方法是使用 @Around 拦截调用,获取目标对象然后调用超级方法并获取其结果(我没有尝试过,但我认为它应该可以工作)然后继续并获取覆盖版本的结果。
-
我们现在只说默认的 intf 实现
-
对我来说,这就像在您的示例中一样。您一定有配置问题。所以请提供一个MCVE,我可以通过编辑您的问题或提供指向 GitHub 存储库的链接来编译和运行。