这有点开箱即用,但我需要跟踪方法的输入并跟踪它们在其他类中的使用位置。鉴于代码可以重构和更改并且我想确保映射保持其准确性,有什么好的方法可以做到这一点吗?
// 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/