记录类的所有属性更改

出于调试目的,我需要跟踪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 

简单的解决方案是立即创建日志。 即添加Logfunction如下:

 void Log(String s) { System.out.println(s); } 

然后编写如下的设置函数:

 void setMyString(String s) { myString = s; Log("myString => " + s); } 

这要求所有设置函数都以不同的方式编写,我想知道是否有更好的解决方案。 例如,创建一个SetValue函数可能更容易(如果可能),该函数接受两个变量并将第一个属性设置为第二个对象的值。 或类似的东西。

任何的想法?

为此,您应该使用执行日志记录的正交代码来包装您的类。

由于您的类没有实现接口,因此您无法使用动态代理,因此您必须使用一种使用字节码工程的解决方案。

我所知道的最强大的解决方案是AspectJ。 但可能你甚至不需要它。 您可以使用Javassist或CGLIb – 允许创建包装类的代理的字节代码工程库,因此您可以添加执行日志记录的代码。

您可以使用AOP拦截setter方法并在调用它们时进行记录。 快速谷歌应该给你一些例子。

如果你通过JPDA调试,
你可以创建一个断点
在你喜欢看的领域。