小编典典

记录一个类的所有属性更改

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);
}

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

任何想法?


阅读 255

收藏
2020-11-30

共1个答案

小编典典

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

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

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

2020-11-30