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