Я всегда использовал аннотации @Service
и @Repository
в своих реализациях, но их можно поместить в любую из них.Хотя размещение его в интерфейсе будет означать, что вы не сможете иметь более одной реализации, поскольку вы получите ошибку NoUniqueBeanDefinitionException
.
В случае @Transactional
это зависит от того,но обычно это идет на службу.Если вы хотите иметь возможность добавлять различные вызовы БД для одной транзакции, то она должна идти в сервис.Если вы хотите совершать небольшие транзакции, тогда лучше использовать DAO, но тогда вы не сможете изменить несколько таблиц за одну транзакцию.Другой недостаток наличия этого в DAO - то, что вы не сможете откатить несколько модификаций, только те, которые выполняются DAO.