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.
Yazılım Kariyerinde İlerlemeni Hızlandıracak Programlar
Patika+ programlarımız ile 4-8 aylık yoğun yazılım kamplarına katıl, temel bilgilerden başlayarak kapsamlı bilgiler edin, yazılım kariyerine başla!
Yorum yapabilmek için derse kayıt olmalısın!