Какой принцип SOLID наиболее фундаментален для архитектуры Spring Framework?

«Какой принцип SOLID наиболее фундаментален для архитектуры Spring Framework?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring Framework наиболее фундаментально реализует Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) — буква «D» в SOLID.

DIP состоит из двух утверждений:

  1. Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
  2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Как Spring реализует DIP:

  • IoC-контейнер управляет созданием объектов (бинов) и их зависимостями.
  • Внедрение зависимостей (DI) — это механизм реализации DIP. Зависимости предоставляются объекту извне (контейнером), а не создаются внутри него.
  • Код зависит от интерфейсов, а конкретные реализации связываются контейнером.

Пример:

// Абстракция (интерфейс) - от неё зависит высокоуровневый сервис
public interface Repository {
    Data findData();
}

// Деталь реализации (зависит от абстракции)
@Repository
public class JdbcRepository implements Repository {
    public Data findData() { /* ... */ }
}

// Высокоуровневый сервис (зависит от абстракции, а не от деталей)
@Service
public class BusinessService {
    private final Repository repository; // Зависимость от интерфейса

    @Autowired // Контейнер Spring внедряет конкретную реализацию (JdbcRepository)
    public BusinessService(Repository repository) {
        this.repository = repository; // Принцип соблюдён
    }
}

Итог: DIP, реализуемый через IoC/DI, — краеугольный камень Spring, который делает код слабосвязанным, тестируемым и гибким. Остальные принципы SOLID (как SRP, OCP) также поддерживаются, но построены на этой основе.