В проекте Java + Spring способы взаимодействия между компонентами обычно осуществляются через Dependency Injection (DI) и Inversion of Control (IoC).
Обычно в Spring контроллеры инжектируются сервисы (компоненты, отвечающие за бизнес-логику), чтобы использовать их функциональность. При этом, обычно в контроллере импортируются классы интерфейсов, которые реализуются соответствующими классами сервисов.
Зачастую в контроллере необходимо использовать методы, определенные в интерфейсе, чтобы обращаться к функциональности, предоставляемой сервисом. Это связано с тем, что DI и IoC позволяют разделить зависимости между компонентами и делают код проекта более гибким и поддающимся изменениям.
Использование интерфейсов позволяет обеспечить слабую связанность между компонентами и упрощает возможность замены одной реализации сервиса другой без изменения кода, а также облегчает модульное тестирование.
Что касается рекомендаций для изучения Java и Spring, вот несколько полезных ресурсов:
1. Официальная документация Spring: https://spring.io/docs
2. Книга "Spring in Action" Крэйга Уоллса (Craig Walls): https://www.manning.com/books/spring-in-action-fifth-edition
3. Udemy курс "Spring & Hibernate for Beginners (includes Spring Boot)" по Маркосу Хендерсону (Chad Darby): https://www.udemy.com/spring-hibernate-tutorial
4. Pluralsight курсы:
- "Introduction to Spring MVC" Мики Браун (Miki Browning): https://www.pluralsight.com/courses/spring-mvc-introduction
- "Spring Fundamentals" Брайана Хаукса (Bryan Hansen): https://www.pluralsight.com/courses/spring-fundamentals
5. Baeldung (https://www.baeldung.com/) - известный веб-сайт с обширной коллекцией статей и уроков по Java и Spring.