Мы сделали что-то похожее с bean utils, и это сработало хорошо. На что следует обратить внимание: Вы углубляетесь в полевые объекты - если Person содержит Address и адрес меняется, вы говорите, что адрес изменился или этот address.postalCode изменился (мы делаем)? Вы возвращаете список свойств, старое значение, новое значение из diff (мы делаем)? Как вы хотите обрабатывать даты - если все, что вас волнует, это часть даты, то ваше сравнение должно игнорировать время? Как сказать, какие поля игнорировать?
Это на самом деле не ответ с копированием и вставкой, а скорее список вещей, которые не были сразу очевидны, когда мы написали наши различия.
Что касается реализации, у нас просто есть статический метод util, который берет два bean-компонента и список свойств для сравнения, а затем возвращает карту свойств в Pair, содержащую старое значение и новое значение. Затем у каждого компонента есть метод diff(Object o)
, который вызывает статический метод util по мере необходимости.