java - 通过 javaagent 拦截具有丰富参数的方法

标签 java scala byte-buddy

是 是否可以拦截方法调用并使用丰富的参数调用此拦截的方法? 我的情况是我必须拦截例如logger.info("foo"),丰富消息参数,例如“foo.bar”并调用 logger.info(“foo.bar”)

最佳答案

是的,这是可能的。使用 Java 代理,最简单的方法是使用 Advice:

class LogAdvice {
  static void onEnter(@Advice.Argument(value = 0, readOnly = false) String message) {
    message = message + ".bar";
  }
}

您现在可以使用 AgentBuilder 在转换器中注册此建议:

dynamicType.visit(Advice.to(LogAdvice.class).on(named("info")));

关于java - 通过 javaagent 拦截具有丰富参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47526979/

相关文章:

scala - 将 'for' 循环从 Java 重写为 Scala

java - 使用字节伙伴代理按AspectJ检测编织的类

java - 如何通过 Byte Buddy 为类中的公共(public)方法定义新注释

java - Netbeans:更新按钮事件的文本字段

java - 如何限制 Hibernate 实体图中使用的列

java - 使用 AnnotationConfigApplicationContext 时禁用 Spring 日志记录

java - java中的数组结构

scala - 将 DAO 层容纳在 Scala Akka Actor 中

scala - 使用无形状类型不等式时如何自定义 Scala 模糊隐式错误

java - 如何使用 MethodDelegation 或 Forwarding 创建 Byte Buddy 代理?