记录类的所有属性更改

时间:2012-10-15 13:55:35

标签: java

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

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

然后编写 set 函数,如下所示:

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:-3)

如果您通过JPDA进行调试,
你可以创建一个断点 在你喜欢看的场地上。