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

标签 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并使用反射和自定义带注释的转换类,我可以在运行时读取它来收集依赖项并提取此信息 - 实际上将类型安全语言转变为类型不安全语言。

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

最佳答案

使用 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]);
  }

}

关于java - 跟踪调用另一个类时使用变量的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37833144/

相关文章:

java - 引入中间基类导致ActiveMQ/JMS NoClassDefFoundError

java - 缓慢显示 ExpandItem

java - 我应该在 Java 中使用什么作为同步语句的锁定对象

java - 如何在单个消息框中显示循环的所有迭代?

java - 用于引用 s3 jar 文件的 Elastic MapReduce libjars 参数

java - 如何通过按 JButton 将文本从一个 JTextField 添加到另一个 JTextField

java - 如何管理字符串数组中连续变化的值

java - 哈希表 - Java

java - 如何过滤 Map 以仅保留 Java 中的特定键

java - 这个字符串比较方法有问题