Вы используете AspectJ, а не Spring AOP, поэтому ваш pointcut соответствует как
call()
(источник вызова метода), так и execution()
( целевой метод)
точек соединения, поэтому вы видите 4 вместо 2 вывода журнала. Вы могли бы легко выяснить это сами, если бы у вас была привычка всегда печатать полную точку соединения (а не только подпись или другую небольшую часть точки соединения) в начале вашего совета, по крайней мере, во время разработки. Вы можете прокомментировать это позже. Таким образом, вы можете просто добавить
System.out.println(proceedingJoinPoint);
, и вы поймете, что я имею в виду.
Самый простой способ решить проблему - ограничить pointcut либо вызовами, либо исполнениями. Я предлагаю последнее, если есть выбор, потому что лучше просто сплести один метод вместо 100 звонилок. Вы хотите изменить свой pointcut на (непроверено, в дороге пишу "свободные руки")
@Around("@annotation(main.Retry) && execution(* *(..))")