Ответ
Spring Framework построен на основе и активно использует множество паттернов проектирования. Вот ключевые из них:
-
Dependency Injection (Внедрение зависимостей) – фундаментальный паттерн Spring. Контейнер IoC управляет созданием бинов и автоматически внедряет их зависимости через конструктор, сеттеры или поля.
@Service public class OrderService { private final PaymentService paymentService; // Зависимость // Внедрение через конструктор (рекомендуемый способ) public OrderService(PaymentService paymentService) { this.paymentService = paymentService; } } -
Singleton (Одиночка) – по умолчанию все бины в Spring контексте являются синглтонами (scope="singleton"). Контейнер гарантирует существование только одного экземпляра на контекст.
-
Factory Method (Фабричный метод) – аннотация
@Beanв классах, помеченных@Configuration, определяет фабричные методы для создания объектов, управляемых контейнером.@Configuration public class AppConfig { @Bean public DataSource dataSource() { return new HikariDataSource(); // Фабричный метод } } -
Proxy (Прокси) – основа Spring AOP. Для добавления сквозной функциональности (транзакции, кэширование, безопасность) Spring создает динамические прокси (JDK или CGLIB) вокруг целевых объектов.
@Transactional // За кулисами создается прокси, управляющий транзакцией public void processOrder(Order order) { // бизнес-логика } -
Template Method (Шаблонный метод) –
JdbcTemplate,RestTemplate,JmsTemplateинкапсулируют шаблонный код (управление ресурсами, обработку исключений), оставляя разработчику реализацию только изменяемых частей (например,RowMapper). -
Observer / Event Listener (Наблюдатель) – механизм событий
ApplicationEventи слушателей@EventListener.@EventListener public void handleOrderCreatedEvent(OrderCreatedEvent event) { // Реакция на событие } -
Adapter (Адаптер) –
HandlerAdapterв Spring MVC адаптирует различные типы контроллеров к единому интерфейсу для обработки запросов. -
Decorator (Декоратор) – часто реализуется через AOP или Bean Post Processors для добавления поведения к бинам.
-
Chain of Responsibility (Цепочка обязанностей) – фильтры в Spring Security (
SecurityFilterChain) или в Servlet API (Filter).