Milyen függőséginjektálási típusokat ismer?
sobes.tech MI
Válasz az MI-től
Három fő típus létezik:
-
Mezőinjektálás (Field Injection): A függőség közvetlenül a osztály mezőjébe injektálódik annotációval (például
@AutowiredSpringben). Egyszerű használni, de megnehezíti az egységtesztelést és sérti az egy felelősség elvét, elrejtve a függőségeket.// Példa mezőinjektálásra public class MyService { // A függőség közvetlenül a mezőbe injektálódik @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
Setterenjektálás (Setter Injection): A függőség nyilvános setter metóduson keresztül injektálódik. Opcionális, nem kötelező, kényelmes a függőségek futás közbeni módosítására (bár ritkán használják). Nem hoz létre kötelező függőséget az objektum létrehozásakor.
// Setterenjektálás példája public class MyService { private MyRepository repository; // A függőség setteren keresztül injektálódik @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
Konstruktorinjektálás (Constructor Injection): A függőség a konstruktor argumentumán keresztül injektálódik. Előnyös, mert garantálja, hogy a függőség kötelező ( nélküle az objektum nem hozható létre), megkönnyíti az egységtesztelést (könnyű mock-okat átadni), és világosan deklarálja az osztály igényeit. Az objektumok, ha a mezők finalok, változatlanok maradnak a létrehozás után.
// Konstruktorinjektálás példája public class MyService { private final MyRepository repository; // A mező lehet final // A függőség a konstruktoron keresztül injektálódik @Autowired // A Spring újabb verzióiban ez az annotáció elhagyható, ha csak egy konstruktor van public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
Összehasonlító táblázat:
| Injektálási típus | Függőség kötelező | Használat egyszerűsége | Tesztelhetőség | Változtathatóság |
|---|---|---|---|---|
| Mezőn keresztül | Opcionális (rejtett) | Magas | Alacsony | Nem |
| Setteren keresztül | Opcionális | Közepes | Közepes | Nem |
| Konstruktoron keresztül | Kötelező | Közepes | Magas | Lehetséges |
A legtöbb esetben ajánlott a konstruktoron keresztüli injektálás használata.