出于调试目的,我需要跟踪Class属性更改。
Class
例如,考虑以下类别:
class Test { int myInt; String myString; ... public void setMyInt(int a) ... public void setMyString(String s) ... public printDebugLog(); } void main() { Test t = new Test(); t.setMyInt(5); t.setMyString("Hello"); t.printDebugLog(); }
我想输出的是这样的:
myInt => 5 myString => Hello
简单的解决方案是立即创建日志。即添加如下Log功能:
Log
void Log(String s) { System.out.println(s); }
然后编写如下所示的 set 函数:
void setMyString(String s) { myString = s; Log("myString => " + s); }
这就要求所有 设置的 函数必须以不同的方式编写,我想知道是否有 更好的 解决方案。例如,创建一个SetValue接受两个变量并将第一个属性设置为第二个对象的值的函数可能更容易(如果可能)。或类似的东西。
SetValue
任何想法?
为此,您应该使用执行日志记录的正交代码包装您的类。
由于您的类未实现接口,因此无法使用动态代理,因此您必须使用使用字节码工程的解决方案之一。
我知道最强大的解决方案是AspectJ。但是也许您甚至不需要它。您可以使用Javassist或CGLIb(字节代码工程库),它们允许创建用于包装类的代理,因此您可以添加执行日志记录的代码。