Odak modu
Bu bölümde Spring'in temel bir kavramı olan "Inversion of Control (IoC)" kavramına bir göz atacağız ve bu konseptin çalışma mantığını anlamaya çalışacağız. Bu kavramın üzerine çok basit bir proje yaparak ilerleyeceğiz.
IoC, nesne yönetimini Spring'e bırakma prensibidir. Spring içerisinde bir "IoC Container" bulunmaktadır. Bu container, projemizdeki component'leri, yani controller'ları, servisleri, repository'leri ve dependency injection uyguladığımız diğer yapıları içine alır ve ihtiyaç duyulduğunda bu nesneleri bize sağlar.
Diyelim ki bir Banka uygulaması geliştiriyoruz ve bu uygulamada döviz kurlarını çekmek için bir servisimiz var. IoC Container, bu servisin nesnesini projemizin içine alır ve ihtiyaç duyulduğunda bu nesneyi bize temin eder. Yani, bir sınıfta bir nesne sürekli olarak üretilip atılmaz, ihtiyaç olduğunda container tarafından verilir.
IoC Container'ın içine atılan bu nesneler, genellikle "beans" olarak adlandırılır. Beans'lerin, yani nesnelerin oluşturulması ve yönetilmesiyle ilgili görevi ise Spring konfigürasyonları üstlenir. Bu konfigürasyonlar, genellikle bir sınıfa @Configuration anotasyonu ekleyerek başlar.
Bu noktada, IoC Container'a bir bean eklemek için bir örnek yapalım. Örneğin, bir CurrencyService adında bir sınıfımız var ve bu sınıf döviz kurlarını çekmekle görevli. Bu servisi IoC Container'a eklemek için bir konfigürasyon sınıfı oluşturuyoruz.
@Configuration
public class AppConfig {
@Bean
public CurrencyService currencyService() {
return new CurrencyService();
}
}
Yukarıdaki örnekte @Bean anotasyonu ile işaretlenen currencyService metodu, IoC Container'a bu servisin bir bean olarak eklenmesini sağlar.
Bu sayede, projemizdeki herhangi bir sınıf, CurrencyService'e ihtiyaç duyduğunda IoC Container'dan bu bean'i alabilir ve kullanabilir. Örneğin, HomeController sınıfı içinde CurrencyService'i injection etmek için aşağıdaki gibi bir kod kullanabiliriz:
@RestController
public class HomeController {
private final CurrencyService currencyService;
public HomeController(CurrencyService currencyService) {
this.currencyService = currencyService;
}
@GetMapping("/showCurrency")
public String showCurrency() {
// CurrencyService'i kullanarak işlemler yapabiliriz.
String currencyData = currencyService.getCurrencyData();
return "Kur verisi çekildi: " + currencyData;
}
}
Bu sayede, herhangi bir yeni nesne üretme veya IoC Container'a ekleme işlemiyle uğraşmadan, projemizdeki farklı sınıflar arasında bağımlılıkları yönetebiliriz.
Sektörde en çok aranan yazılım becerilerini kazan
Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.
Yunus Emre Kabakcı
Patika+ mezunuPatika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,
3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!
“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“
Yorum yapabilmek için derse kayıt olmalısın!