Hangi bağımlılık enjeksiyonu türlerini biliyorsunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Üç ana tür vardır:
-
Alan Enjeksiyonu (Field Injection): Bağımlılık, anotasyon (örneğin, Spring'de
@Autowired) kullanılarak doğrudan sınıf alanına enjekte edilir. Kullanımı kolaydır, ancak birim testlerini zorlaştırır ve tek sorumluluk ilkesini ihlal eder, bağımlılıkları gizler.// Alan enjeksiyonu örneği public class MyService { // Bağımlılık doğrudan alan içine enjekte edilir @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
Setter Enjeksiyonu (Setter Injection): Bağımlılık, kamuya açık bir setter yöntemi aracılığıyla enjekte edilir. Bağımlılığın isteğe bağlı olmasına izin verir (zorunlu değil), çalışma zamanında bağımlılıkları değiştirmek için uygundur (nadiren kullanılır). Nesne oluşturulurken zorunlu bağımlılık oluşturmaz.
// Setter enjeksiyonu örneği public class MyService { private MyRepository repository; // Bağımlılık, setter aracılığıyla enjekte edilir @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
Yapıcı Enjeksiyonu (Constructor Injection): Bağımlılık, yapıcı (constructor) argümanı aracılığıyla enjekte edilir. Tercih edilir, çünkü bağımlılığın zorunlu olduğunu garanti eder (on olmadan nesne oluşturulamaz), birim testlerini kolaylaştırır (moc nesneleri kolayca geçilebilir) ve sınıfın ihtiyaçlarını açıkça belirtir. Nesneleri, alanlar final ise, değiştirilemez hale getirir.
// Yapıcı enjeksiyonu örneği public class MyService { private final MyRepository repository; // Alan final olabilir // Bağımlılık, yapıcı aracılığıyla enjekte edilir @Autowired // Spring'in yeni sürümlerinde, yalnızca bir yapıcı varsa bu anotasyon kaldırılabilir public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
Karşılaştırmalı tablo:
| Enjeksiyon Türü | Bağımlılık Zorunluluğu | Kullanım Kolaylığı | Test Edilebilirlik | Değiştirilebilirlik |
|---|---|---|---|---|
| Alan aracılığıyla | Opsiyonel (gizli) | Yüksek | Düşük | Hayır |
| Setter aracılığıyla | Opsiyonel | Orta | Orta | Hayır |
| Yapıcı aracılığıyla | Zorunlu | Orta | Yüksek | Mümkün |
Çoğu durumda, yapıcı enjeksiyon kullanımı önerilir.