Я не слишком знаком с синтаксисом pointcut AspectJ, но есть ли у вас способ исключить вызов getTotalBalance
из вашего определения pointcut? Это предотвратит рекурсию.
Кроме того, ваше определение точки отсечения в любом случае кажется слишком широким: я предполагаю, что проверка баланса, которую вы реализуете в своем аспекте, должна быть выполнена только для написания методов. Поэтому вызов только для чтения, такой как getTotalBalance
, не должен совпадать. У вас есть способ различения методов readonly и методов записи в целевом классе, e. г. по существующим аннотациям транзакций или что-то в этом роде?
Если нет, вы можете сами ввести такие (пользовательские) аннотации и настроить свой pointcut, чтобы он соответствовал всем вызовам открытых методов, которые не помечены как доступные только для чтения. Но это будет означать изменение кода в целевом классе, что не всегда возможно. Но YMMV.