Нет никакого различия в отношении Spring. По соглашению вы можете пометить классы DAO с помощью @Repository и услуг с помощью @Service. Кроме того, первый выполняет некоторый перевод исключений уровня сохранения.
Поскольку вы теоретически спрашиваете: DAO должен выполнять необработанные операции с базой данных и переводить их на некоторые конструкции более высокого уровня (объекты, коллекции). Услуги должны вызывать DAO и выполнять бизнес-операции. Обычно демаркация транзакций выполняется на уровне обслуживания, чтобы охватить несколько вызовов DAO.
Наконец, DAO должен абстрагировать бизнес-логику из деталей персистентности, в идеале позволяя переключать уровень устойчивости без изменений бизнес-логики (услуг). Это вряд ли возможно из-за утечки абстракции поставщиков персистентности (например, ленивая загрузка).
Ответ 2
DAO - объект доступа к данным, является объектом обработки соединения с вашим хранилищем данных (типичная база данных). У вас есть ваши запросы, и DAO предоставляет данные вашим услугам.
Службы должны содержать всю вашу логику. Если у вас есть логика separete, вы можете теоретически изменить свой уровень пользовательского интерфейса или слой DAO, не затронув его.
Ответ 3
DAO (Data Access Object) - это шаблон проектирования, который состоит в создании для каждой таблицы в вашей базе данных класса, он предоставляет метод для разделения постоянства объектов и логики доступа к данным.
Ответ 4
Это дает развязку преимуществ. При изменении источника данных способ обработки данных в Сервисе для всех пользователей сервиса (мобильный клиент, веб-клиент) не меняется. Но вам нужно изменить способ извлечения данных из источника данных.