Dependency Injection Nedir?
Bir sınıfın bağımlılıklarını kendi oluşturmak yerine dışarıdan almasıdır. Test edilebilirliği artırır, bağımlılıkları azaltır.
Spring'de @Autowired
@Service
public class SiparisServisi {
private final UrunRepository urunRepo;
private final EmailServisi emailServisi;
// Constructor injection (önerilen)
public SiparisServisi(UrunRepository urunRepo, EmailServisi emailServisi) {
this.urunRepo = urunRepo;
this.emailServisi = emailServisi;
}
public Siparis olustur(SiparisDTO dto) {
Urun urun = urunRepo.findById(dto.getUrunId()).orElseThrow();
// iş mantığı...
emailServisi.bildirimGonder(dto.getEmail());
return kaydet(dto, urun);
}
}Bean Scope'ları
- Singleton: Varsayılan — tek instance
- Prototype: Her inject'te yeni instance
- Request/Session: Web uygulamalarında
@Component, @Service, @Repository
Spring bu anotasyonlarla sınıfları otomatik olarak Bean container'a ekler.