Для перехвата сеттеров, определенных в интерфейсе, вы можете использовать прокси.
Для перехвата вызовов методов вы можете использовать AOP, такой как AspectJ.
Однако, чтобы перехватить назначения полей, я бы использовал библиотеку байт-кода, такую как ASM, BCEL, cglib или javassist. Я предпочитаю ASM, и он быстрый и имеет некоторые инструменты, облегчающие написание байт-кода.