Dependency Injection, bu başlık altında daha önce işlemiş olduğum Inversion of Control tekniğinin özel bir halidir. Paralellik taşır; fakat bazı frameworkler tarafından özelleştirilir. Daha önce de bahsettiğim gibi, başlangıç parametrelerinin ayarlanması konusu artık kullanıcı odaklı değil, framework odaklı olarak yapılmak istenmektedir. Devam etmeden önce pdf formattaki yazıya her zaman olduğu gibi buradan ulaşabilirsiniz.

Dependency Injection, kullanılacak olan DataSource, Connection, sınıf gibi nesnelerin kullanılmadan önce başlangıç durumuna getirilmesini ve bunu da sınıf içerisinde değil, framework içerisinde yapmayı amaçlar. Böylece kullanıcı farklı parametrelerle yeni nesneler oluşturup, herhangi bir problem yaşamadan çalışmasına devam etmeyi amaçlar. Bir örnek vermek istiyorum. Bir Connection açtığınızı düşünün. Bunun için eğer kodun içine tek tek url, kullanıcı adı, şifre gibi parametrelerini yazarsak, bir sonraki farklı bağlantıda kodu değiştirmemiz gerekir. Bunun yerine bu işi frameworke bırakıp sadece sınıf içerisinde nesne ataması yaparsak artık parametre ayarlama ile ilgilenmiş olmayız.  Böylece farklı ortamlarda bile çok kolay Connection oluşturabiliriz.

Dependency Injection genelde üç türlü yöntem kullanır.

1 – Constructor Injection
public Sinif(Connection baglanti)
{
this.baglanti = baglanti;
}
2 – Setter Injection
public void setBaglanti(Connection baglanti)
{
this.baglanti = baglanti;
}
3 – Interface Injection
public void setBaglanti(ArayuzSinifi baglanti)
{
this.baglanti = baglanti;
}

Yukarıda üç tür injection yöntemine örnek verdik. Yalnız ikinci ve üçüncü yöntem aynı gibi duruyor olsa da aslında farklılar. İkinci yöntemde direkt Connection nesne ataması yapılırken, üçüncü yöntemde bir arayüz ataması yapılmaktadır. Yukarıdakilerin yanı sıra factory method, service locator gibi çeşitli yöntemler de mevcuttur.

Dependency Injection ile yaşam döngüsüne ait olaylar framework tarafından tanımlanır ve kullanıcı sadece bunların içini doldurur. Kullanıcı bunları kullanmak için sadece bir servis örneğine ihtiyaç duyar.

Dependency Injection yöntemini kullanan framework örnekleri içerisinde Pico ve Spring verilebilir. Bunlardan Spring daha çok setter injection kullanır ve oldukça da popülerdir. Bunun yanı sıra Spring’ in XML ile de çalışabilmesi ayrı bir avantajdır.

Son olarak da üç temel öğeyi vurgulamak istiyorum. Bunlar kullanıcı, servis(service) ve injector olarak sayılabilir. Kullanıcı da sıkıntı yok, tahmin edebiliriz :D, servis ise olayları kontrol eden kısımdır. Injector ise arada bulunan kısımdır. Gerekli bilgi akışını sağlar.

Oldukça sık kullanılmaya başlanılan bir yöntemi parmaklarım yettiğince 😀 anlatmaya çalıştım. Umarım faydalı olmuştur.

Bol Java’ lı günler dileğiyle…

One response

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir