2017-09-03 4 views
0

methodAという名前のメソッドを1つのarg型で傍受したいと思っています。 hasParameters()apiの使い方bytebuddyで特定のパラメータを持つメソッドをインターセプトする方法

パブリッククラスのデモこのため{

public static void main(String[] args) { 

    new ByteBuddy() 
      .subclass(A.class) 
      .method(named("methodA").and(hasParameters(?))) 
} 


static class A { 

    public void methodA() { 
     System.out.println("methodA() invoked."); 
    } 

    public void methodA(String arg) { 
     System.out.println("methodA(" + arg + ") invoked."); 
    } 
} 

}

答えて

1

あなたがElementMatchers.takesArguments(String.class)マッチャーをしたいです。

だから、そのような何か:

Class<? extends A> loaded = new ByteBuddy().subclass(A.class) 
     .method(ElementMatchers.named("methodA").and(ElementMatchers.takesArguments(String.class))) 
     .intercept(MethodDelegation.to(Demo.class)) 
     .make().load(Demo.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded(); 

    A instance = loaded.getConstructor().newInstance(); 
    instance.methodA("abc"); 
    instance.methodA(); 


public class Demo { 

    static void intercept(String arg){ 
     System.out.println("intercepted"); 
    } 
} 
+0

はどうもありがとうございました。 ElementMatchers.hasParametersメソッドを使用し、ElementMatcher >インターフェイスを拡張し、うまくいきます。 – MengZhi

関連する問題