Ответ
Да, Spring активно использует и поощряет применение принципов объектно-ориентированного программирования (ООП), хотя и не является исключительно ООП-фреймворком.
Как Spring реализует принципы ООП:
-
Инкапсуляция:
- Классы-компоненты (бины) инкапсулируют свою логику. Внешние зависимости не создаются внутри класса, а внедряются (Dependency Injection).
-
Абстракция:
- Spring построен на работе с интерфейсами, а не с конкретными реализациями.
- Аннотации (например,
@Service,@Repository) абстрагируют детали создания и настройки бинов.
-
Наследование и полиморфизм:
- Широко используются интерфейсы. Внедряя зависимость через интерфейс, вы можете легко подменить реализацию (полиморфизм).
Практический пример (Dependency Injection как композиция):
// Интерфейс (абстракция)
public interface NotificationService {
void send(String message);
}
// Конкретная реализация
@Service // Spring-бин
public class EmailService implements NotificationService {
@Override
public void send(String message) {
// логика отправки email
}
}
// Класс, использующий зависимость (композиция через DI)
@Service
public class OrderService {
private final NotificationService notifier; // Зависимость через интерфейс
@Autowired // Внедрение зависимости (конструкторный DI)
public OrderService(NotificationService notifier) {
this.notifier = notifier;
}
public void confirmOrder(Order order) {
// бизнес-логика
notifier.send("Заказ подтвержден"); // Полиморфный вызов
}
}
Важно: Spring также использует аспектно-ориентированное программирование (AOP) для сквозной функциональности, что является дополнением к классическому ООП.