Не с помощью отражения - отражение просто позволяет получить доступ к статической информации о классах / полях / и т. Д. Во время выполнения.
Аспектно-ориентированное программирование - это больше, чем вы думаете - это позволяет вам вводить небольшие кусочки кода (называемые «советами») в определенные моменты исходного кода (например, перед запуском метода, когда поле установлено и т. д.). Это почти наверняка позволит вам сделать то, что вы ищете.
Слово предупреждения, хотя - как вы, похоже, поняли, вряд ли будет хорошей идеей полагаться на аспекты для вашей общей логики, так как с ними очень трудно рассуждать и точно определять, что произойдет, когда ( По определению, они нарушают ментальную модель по умолчанию, которая вызывает метод foo (), что означает, что управление переходит непосредственно к этому методу). AOP отлично для таких вещей, как ведение журнала или отладка, поскольку позволяет писать небольшие кусочки кода, которые затрагивают множество сквозных задач без особых усилий, и не требуют, чтобы вы изменяли код базовое приложение. Ваш совет может быть внесен по мере необходимости и просто пропущен, когда не требуется.