Java ile bir program geliştirme aşamasında çeşitli amaçlarda nesneler türetir ve oluşturduğumuz bu nesneleri birbirleri ile ilişkilendiririz. Artık ihtiyaç duyulmadığı taktirde yaşam döngüsü sonucunda Garbage Collector ilgili nesneyi sonlandırır. IoC mekanizması, geliştiricilerin yapmakta olduğu çeşitli kontrollerin kendilerinden alınıp kullanılan ilgili teknolojilere verilmesi işlemidir. Spring Framework ile de bu mekanizma sıklıkla kullanılır ve büyük önem taşır.
IoC altında inceleyeceğimiz bir diğer mekanizma ise bağımlılıkları yönetebilmemizi sağlayan DI yani Dependency Injection kavramıdır. Nesneler arası bağımlılıkları yönetme işlemini biz yazılımcılar değil de Spring’e devrediyoruz. Böylelikle DI sayesinde bağımlılıkların yönetimi daha esnek bırakılarak daha geliştirilebilir bir ortam sunulur. Yani aslında bağımlılıkları kaldırıyoruz ya da soyutluyoruz diyebiliriz. Peki bu nasıl gerçekleşiyor?
Yazılım geliştirme aşamasında kullandığımız ve aralarında bağımlılık ilişkisi bulunan nesneler XML konfigürasyon dosyası aracılığı ile bean tanımlamaları yapılır. Programcı tarafından bağımlılık enjeksiyonu tetiklendiği andan itibaren artık Spring gerekli yerlerde gerekli kontrolleri kendisi sağlamaya başlar. Spring Framework üzerinden bağımlılık enjeksiyonları kurucu metotlar(constructor) ve getter-setter aracılığı ile yapılır.
Bunları örnek üzerinden inceleyelim:
Ulke ve Sehir adında iki adet sınıfımız olsun. Sehir sınıfından bir nesneyi Ulke sınıfı içerisinde kullanarak bağımlılık oluşturalım.
- Getter-Setter metotları aracılığı ile bağımlılık enjeksiyonu:
1 | public class Ulke { |
1 | public class Sehir { |
XML konfigürasyon tanımlamaları:
1 | <bean id="beanSehir" class="dogukansahin.Sehir"> |
XML konfigürasyon tanımlamaları:
1 | <bean id="beanSehir" class="dogukansahin.Sehir"> |
Spring 4 ve sonrası sürümlerinde bağımlılıklar ilgili alanların üzerine @Autowired annotation’ı kullanılarak da enjekte işlemi gerçekleştirilebilir.
Örnek
1 | public class Ulke { |
Comments