跟踪调用另一个类时使用变量的位置

时间:2016-06-15 10:41:49

标签: java

这有点开箱即用,但我需要跟踪方法的输入并跟踪它们在另一个类中的使用位置。有没有什么好方法可以做到这一点,因为代码可以重构和更改,我想确保映射保持准确性?

// doSomething is under my control
@Endpoint("testEndpoint")
public void doSomething(String name, int age, String surname) {

   String fullName = name + " " + surname;

   // SendRequest is generated code (not under my control)
   SendRequest sr = new SendRequest();
   sr.setFullName(fullName);
   sr.setUserAge(age)
   this.sender.send(sr);

}

所以他们的输出可能是

testEndpoint
  INPUT <> OUTPUT
  ---------------
  name -> fullName
  age -> userAge
  surname -> fullName

我需要在运行时和执行方法之前获取此信息。我当前的解决方案受到Dozer的启发,并使用反射和自定义带注释的转换类,我可以在运行时读取它来收集依赖关系并提取这些信息 - 实际上将类型安全的语言转换为类型不安全的语言。

只是想知道是否有更好的解决方案或某些库可以做到这一点。

1 个答案:

答案 0 :(得分:0)

如何使用AspectJ

您可以定义一个与您想要捕获参数的方法相匹配的切点,然后定义实际捕获和存储,跟踪以及任何参数值的建议。

public aspect ExampleAspect {

  pointcut doSomething() : call(public void doSomething(String,int,String));

  before(): doSomething(){
    System.out.println("INPUT <> OUTPUT");
    System.out.println("---------------");
    System.out.println("name -> "+ this.JoinPoint.getArgs[0]);
    System.out.println("age -> "+ this.JoinPoint.getArgs[1]);
    System.out.println("surname -> "+ this.JoinPoint.getArgs[2]);
  }

}