digital-garden/dev/architecture/Dependency Injection.md
Struchkov Mark 46e423c2db
All checks were successful
continuous-integration/drone/push Build is passing
Fluent API.md
2024-10-04 01:19:00 +03:00

71 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
- DI
- внедрение зависимостей
tags:
- maturity/🌱
date: 2023-10-26
zero-link:
- "[[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]"
parents:
- "[[Inversion of Control]]"
- "[[Паттерн проектирования]]"
linked:
---
**Dependency Injection (DI)** — это паттерн проектирования, который используется для реализации принципа [[Inversion of Control]] (IoC). DI позволяет передавать зависимости объектам извне, вместо того чтобы объекты сами создавали их. Это ослабляет связь между компонентами системы, что делает код более гибким и удобным для поддержки.
В **Java** DI часто используется через фреймворки, такие как [[../../meta/zero/00 SpringBoot|Spring]] или [[../../meta/zero/00 Quarkus|Quarkus]], где зависимости внедряются автоматически. Основные способы внедрения зависимостей включают:
- **Внедрение через конструктор**: зависимости передаются через параметры конструктора.
- **Внедрение через сеттеры**: зависимости устанавливаются через методы.
- **Внедрение через поля**: зависимости могут быть внедрены напрямую в поля класса с использованием аннотаций.
Пример внедрения через конструктор с использованием Spring:
```java
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
@Component
class Engine {
public void start() {
System.out.println("Engine started");
}
}
@Component
class Car {
private final Engine engine;
@Autowired
public Car(Engine engine) {
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println("Car is moving");
}
}
```
В этом примере Spring автоматически создаёт и инжектирует объект Engine в Car, благодаря аннотации `@Autowired`. Это упрощает управление зависимостями и позволяет легче изменять их без изменения логики программы.
Главные преимущества DI:
- **Лёгкость тестирования**: можно подменять зависимости, что упрощает создание модульных тестов.
- **Масштабируемость**: система легче адаптируется к изменениям.
- **Упрощение архитектуры**: бизнес-логика отделена от процесса создания зависимостей.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]
**Родитель**:: [[Inversion of Control]], [[Паттерн проектирования]]
**Источник**::
**Автор**::
**Создана**:: [[2023-10-06]]
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->