这有点开箱即用,但我需要跟踪方法的输入并跟踪它们在另一个类中的使用位置。有没有什么好方法可以做到这一点,因为代码可以重构和更改,我想确保映射保持准确性?
// 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的启发,并使用反射和自定义带注释的转换类,我可以在运行时读取它来收集依赖关系并提取这些信息 - 实际上将类型安全的语言转换为类型不安全的语言。
只是想知道是否有更好的解决方案或某些库可以做到这一点。
答案 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]);
}
}