Spring Flashcards
IoC, DI
IoC (Inversion of Control) - это принцип, при котором поток выполнения программы контролируется фреймворком. Используется для уменьшения зацепления. Фреймворк с помощью callback-ов вызывает пользовательский код, как следствие потеря контроля над потоком исполнения - Инверсия управления.
DI (Dependency Injection) - внедрение зависимостей - это реализация принципа IoC в применении к управлению зависимостями.
Типы бинов
@Component
@RestController (@Controller)
@Repository
@Service
Способы устранения циклических зависимостей
- Провести рефакторинг архитектуры.
Циклические зависимости обычно являются признаком неправильного проектирования. Пересмотрите структуру классов и разделите обязанности. Например, выделите общую функциональность в третий бин. - Использовать @Lazy
Аннотация @Lazy откладывает инициализацию зависимости до момента её фактического использования. Это полезно, если зависимость не нужна на этапе запуска приложения. - Использовать внедрение через @PostConstruct или setters
Можно использовать setter-методы для установки зависимостей после создания объекта. - Использовать ApplicationContext
Если невозможно устранить цикл другим способом, можно внедрить зависимости вручную через ApplicationContext.
Жизненный цикл бина
Этапы инициализации контекста
Способы создания бинов
- XML
- Через аннотации (@Component, @Service, @Repository)
- Через код (@Bean)
Способы внедрения бина
- Через поля (@Autowired) Преимущества: простота реализации. Недостатки: сложность тестирования (нужно использовать Reflection для подмены зависимостей в тестах). Нарушение инкапсуляции.
- Через конструктор. Преимущества: Иммутабельность (зависимости можно задать только один раз). Лёгкость тестирования.
Недостатки: Если слишком много зависимостей, конструктор становится сложным. - Через setter. Преимущества: Поддержка необязательных зависимостей, зависимости можно подменять в runtime
Недостатки: Объект может быть создан без всех зависимостей, что нарушает целостность, делает объект изменяемым
Скоупы бинов, как определить свой scope
- Singleton
- Prototype
- Request
- Session
- Application
- Websocket
Какие паттерны используются в Spring Framework
IoC, DI
Factory
Singleton
Proxy
Template
Dao
Context Object
Observer
Front Controller
MVC
View Helper
(Написать примеры)
Антипаттерны