用Java中的注释跟踪脏属性?

用Java中的注释跟踪脏属性?,java,enums,annotations,Java,Enums,Annotations,我有一个问题,我正在努力解决。我有一些模型对象,如果它们的属性发生变化,我想跟踪它们。由于这些模型的使用模式,我更希望跟踪是自包含的,这样可以实现以下功能: Student student = new Student(); student.setName = "name"; List<StudentProperties> changedProperties = student.getChangedProperties(); //changedProperties = { Studen

我有一个问题,我正在努力解决。我有一些模型对象,如果它们的属性发生变化,我想跟踪它们。由于这些模型的使用模式,我更希望跟踪是自包含的,这样可以实现以下功能:

Student student = new Student();
student.setName = "name";
List<StudentProperties> changedProperties = student.getChangedProperties();
//changedProperties = { StudentProperties.name }
Student=newstudent();
student.setName=“name”;
List changedProperties=student.getChangedProperties();
//changedProperties={StudentProperties.name}
我的第一反应是创建一个内部hashmap和属性enum,然后通过修改setter来更新hashmap来跟踪更改。我不是一个粉丝,因为它不是泛型的,所以我不能对我所有的模型使用一个实现

是否有一种清洁的解决方案:

@TrackChanges
public class Student implements Trackable {
    @Track
    private String name;

    public List<StudentProperties> getChangedProperties() {
        //somehow return changed properties
    }
}
@TrackChanges
公共班级学生实现可跟踪{
@跟踪
私有字符串名称;
公共列表getChangedProperties(){
//以某种方式返回更改的属性
}
}
其中,通过注释创建属性枚举,以及包含可由getChangedProperties()返回的属性的映射

我愿意使用observable模式,但我不确定这将如何与模型的客户一起工作(在他们使用我的模型之前,我是否必须强迫他们也遵循observable模式?这听起来很烦人,因此我不赞成)

感谢

查看基于方面(文章的第二部分)和
属性更改支持
。它是干净和通用的

您可以轻松地对其进行调整,以限制对@Track注释的属性的跟踪


我创建了一个名为AValueObject的基类,它包含一个DirtyTracker属性,用于处理以下内容:


我还为您创建了一个AspectJ方面来处理PropertyChangeSupport事件触发:

您在使用Java SE吗?如果没有,您可以使用。我使用的是EE,所以我现在就来看看拦截器。它要求所有客户端将拦截器添加到beans.xml文件中。如果我能让它自给自足,那就更好了。