В документации Spring рекомендуется размещать аннотацию @Transactional для конкретного класса / метода, а не для интерфейса. Причина этого неоднократно упоминалась в переполнении стека, например:
Где разместить аннотацию @Transactional: в определении интерфейса или в классе реализации?
Spring Security @Secured поведение отличается; большая часть документации показывает размещение аннотации на интерфейсе. На самом деле, похоже, это работает, независимо от того, аннотируете ли вы интерфейс или конкретный класс и не зависимо от того, используете ли вы прокси JDK или CGLib.
Это кажется превосходным решением. Так почему несоответствие? Один ответ на вышеуказанный вопрос предполагает влияние на производительность ... но, безусловно, производительность так же важна для безопасности?!
А как решение @Secured решает проблему наследования алмазов (класс реализует 2 интерфейса, в обоих случаях один и тот же метод @Secured)?