Весь смысл использования интерфейса заключается в создании абстракции. Когда вы называете себя DAO из Сервиса, ваша служба не знает о фактической реализации DAO / случаев, когда у вас есть несколько реализаций вашего интерфейса DAO, ваша служба не знает о фактической используемой имплиции.
С весной вы будете использовать - Autowire, чтобы ввести зависимость. Вы будете ссылаться на свою зависимость с помощью интерфейса.
@Component/@Service
class ServiceImpl {
@Autowired
private DAOInterface dao;
// Rest of code
}
Spring знает - чтобы создать экземпляр этого ServiceImpl, ему нужно внедрить конкретный импл типа DAOInterface. Если у вас есть конкретная реализация, она делает это. Если у вас есть несколько impls - вам нужно определить по имени компонента, какую реализацию вам нужно, используя @ Qualifier.
Интерфейс является своего рода контрактом для ваших классов impl. Помимо абстрагирования от фактического значения, он помогает вам отделить слои, не имея прямой зависимости от конкретных классов. Это хороший дизайн шаблона