Aké typy injekcie závislostí poznáte?
Odpoveď od AI
sobes.tech AI
Existujú tri hlavné typy:
-
Vkladanie cez pole (Field Injection): Závislosť sa priamo vkladá do poľa triedy pomocou anotácie (napríklad
@Autowiredv Springu). Jednoduché na použitie, ale sťažuje modulárne testovanie a narúša princíp jednotnej zodpovednosti tým, že skrýva závislosti.// Príklad vkladania cez pole public class MyService { // Závislosť sa vkladá priamo do poľa @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
Vkladanie cez nastavovač (Setter Injection): Závislosť sa vkladá cez verejnú metódu-setter. Umožňuje voliteľne mať závislosť (nie je povinné ju nastaviť), je vhodné na zmenu závislostí počas behu (hoci sa to zriedka používa). Nezavádza povinnú závislosť pri vytváraní objektu.
// Príklad vkladania cez setter public class MyService { private MyRepository repository; // Závislosť sa vkladá cez setter @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
Vkladanie cez konštruktor (Constructor Injection): Závislosť sa vkladá cez argument konštruktora. Je preferovaná, pretože zabezpečuje povinnosť závislosti (bez nej objekt nemôže byť vytvorený), uľahčuje modulárne testovanie (ľahko je odovzdať mock objekty) a jasne deklaruje potreby triedy. Robí objekty nemennými po vytvorení, ak sú polia
final.// Príklad vkladania cez konštruktor public class MyService { private final MyRepository repository; // Pole môže byť final // Závislosť sa vkladá cez konštruktor @Autowired // V novších verziách Springu je možné vynechať anotáciu @Autowired pre jediný konštruktor public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
Porovnávacia tabuľka:
| Typ vkladania | Povinnosť závislosti | Jednoduchosť použitia | Testovateľnosť | Nemennosť |
|---|---|---|---|---|
| Cez pole | Voliteľná (skrytá) | Vysoká | Nízka | Nie |
| Cez setter | Voliteľná | Stredná | Stredná | Nie |
| Cez konštruktor | Povinná | Stredná | Vysoká | Možná |
V väčšine prípadov sa odporúča používať vkladanie cez konštruktor.