Когда вы программируете интерфейс, вы обычно внедряете этот интерфейс в другие классы, при вызове методов вы затем вызываете методы интерфейса, а не фактическую реализацию. Таким образом, если вы хотите переключить реализацию, достаточно просто заменить метод @Bean в классе Configuration новой реализацией.
Представьте, что вы этого не делаете и хотите изменить реализацию. Вам нужно будет найти все вхождения в вашей кодовой базе и заменить ее новой реализацией.
Другие преимущества кодирования интерфейса включают повышенную тестируемость, так как вы можете имитировать свои зависимости, позволяет использовать прокси-сервер JDK Dynami c и повышать согласованность между вашими классами.