Я думаю, что я должен с уважением частично не согласиться с Блаженным Гиком. То, что упомянуто, является очень специфическим случаем использования, который требует использования аннотаций на интерфейсе.
По моему личному опыту, я сталкивался со случаями, когда фреймворк либо из-за дизайна, либо из-за ошибки не реагировал должным образом на размещение аннотаций в интерфейсе. Например, Apache CXF неправильно обрабатывает запросы @PUT с @PathParams, определенными в пути, когда вы размещаете аннотации на интерфейсе. Не спрашивай меня почему. CXF не одинок в этом; Spring Security имеет аналогичные ограничения при размещении аннотаций на интерфейсах. Так что это противоположность тому, что упоминалось выше
В тех случаях, когда вы можете свободно выбирать, где размещать аннотации, Я бы настоятельно рекомендовал вам рассмотреть, что имеет смысл с точки зрения намерения, дизайна и простоты разработки .
В качестве философского аргумента некоторые люди говорят, что размещение аннотаций на интерфейсах - это еще одна форма программирования по контракту - вы говорите, что реализации будут соблюдать определенные правила.
Другая сторона этой медали (в зависимости от вашего определения интерфейсов) заключается в том, что интерфейсы не должны заботиться о том, какие шаги их разработчики предпринимают для достижения цели, определенной в контракте на метод. Например, зачем размещать аннотацию @Transactional на интерфейсе, если у вас может быть две реализации, одна из которых не знает, что такое «транзакция»?
На практике линии размыты. В случае определения спокойной конечной точки вы можете разместить соответствующие аннотации на интерфейсе. Я думаю, что это имеет смысл в большинстве случаев; у вас, вероятно, не будет нескольких реализаций, в которых одна и та же сигнатура метода отвечает на разные глаголы HTTP. Однако вы можете столкнуться с ситуацией, когда разные реализации предпочитают потреблять и создавать разные типы носителей.
Итак, большая идея здесь "это зависит". Но, надеюсь, это пища для размышлений для тех, кто может наткнуться на этот вопрос.