Java 修改静态方法的返回值

Java 修改静态方法的返回值,java,byte-buddy,Java,Byte Buddy,我需要截获对静态方法的方法调用。我的新方法需要调用该方法的原始实现,对其返回的内容进行一些处理,并返回修改后的值 我的问题是“调用方法的原始实现”部分,我该怎么做?一些文档阅读和谷歌搜索似乎表明我需要使用@Origin或@SuperMethod的建议,但我一直无法找到如何以允许我返回修改值的方式创建顾问 有任何指针吗?如果您使用的是建议,则必须使用建议特定的注释: class SomeAdvice { @Avice.OnMethodEnter static void enter() {

我需要截获对静态方法的方法调用。我的新方法需要调用该方法的原始实现,对其返回的内容进行一些处理,并返回修改后的值

我的问题是“调用方法的原始实现”部分,我该怎么做?一些文档阅读和谷歌搜索似乎表明我需要使用@Origin或@SuperMethod的建议,但我一直无法找到如何以允许我返回修改值的方式创建顾问


有任何指针吗?

如果您使用的是
建议
,则必须使用建议特定的注释:

class SomeAdvice {
  @Avice.OnMethodEnter 
  static void enter() {...}
  @Advice.OnMethodExit 
  static void exit(@Advice.Return(readOnly = false) Object val) {
    val = "some other value";
  }
}

似乎您正在将
MethodDelegation
的概念混合到这里的建议中。然而,这两种情况大不相同。Advice在方法前后添加代码,委派替换方法。

不确定我是否正确理解您的需求,但我猜:Spring AOP可以在这方面提供帮助。是的,我同意@Stultuske。一些周围的
@建议应该起作用trick@DamCx我更多的考虑的是“返回后”:)我会在谷歌上搜索Rafael Winterhalter和@Supercall,例如,看看他的解决方案:或者只是给他发个消息。我认为使用ByteBuddy拦截静态方法的唯一方法是通过Java代理:。太棒了,readOnly=false on@Advice.Return是拼图中缺失的第一块。只剩下一件事了我如何调用原始方法?(即,我没有向其中添加建议的方法)。除非您跳过它,否则它将在enter和exit建议之间调用(请参见
@OnMethodEnter
javadoc)。亲爱的上帝……当然。我今天的脑子不好。谢谢你的帮助!