Dependency Injection (DI) β€” это ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Inversion of Control (IoC). DI позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ зависимости ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈΠ·Π²Π½Π΅, вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ сами создавали ΠΈΡ…. Π­Ρ‚ΠΎ ослабляСт связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ систСмы, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

Π’ Java DI часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Spring ΠΈΠ»ΠΈ Quarkus, Π³Π΄Π΅ зависимости Π²Π½Π΅Π΄Ρ€ΡΡŽΡ‚ΡΡ автоматичСски. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ способы внСдрСния зависимостСй Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· конструктор: зависимости ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора.
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· сСттСры: зависимости ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· поля: зависимости ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² поля класса с использованиСм Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ внСдрСния Ρ‡Π΅Ρ€Π΅Π· конструктор с использованиСм Spring:

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:

  • Π›Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒ тСстирования: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ зависимости, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстов.
  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ: систСма Π»Π΅Π³Ρ‡Π΅ адаптируСтся ΠΊ измСнСниям.
  • Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹: бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π° ΠΎΡ‚ процСсса создания зависимостСй.

ΠœΠ΅Ρ‚Π° информация

ΠžΠ±Π»Π°ΡΡ‚ΡŒ:: 00 АрхитСктура ПО
Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ:: Inversion of Control, ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ::
Автор::
Π‘ΠΎΠ·Π΄Π°Π½Π°:: 2023-10-06

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ