2 Ocak 2014 Perşembe

Java EE Dependency Injection

Yazdığım son projede Spring Framework ile DI (Dependency Injection) dünyasına adım attıktan sonra Java EE'nin kendi bünyesinde sağladığı DI özelliklerini kullanmayı düşünüyordum. Kısa bir deneme projesi yaparak GitHub'a ekledim, https://github.com/battal84/ExampleCDI adresinden bakabilirsiniz.
Kısaca bahsetmek gerekirse "inject" etmek istediğimiz sınıfın başına injection sonucu elde edeceğimiz nesnenin yaşam süresini belirten bir scope annotation'ı ekliyoruz, bu örneğin @Singleton, @RequestScoped, @SessionScoped olabilir. Daha sonra nesneyi inject edeceğimiz noktada basitçe @Inject annotation'ını kullanarak nesneyi tanımlıyoruz.
Eğer inject edeceğimiz sınıf Java bean kurallarına uygun değilse (veya belki üçüncü parti biri tarafından alınan bir JAR içinde bulunuyor olabilir) bu sınıftan nesne üreten "Producer" metotları kullanıyoruz. Spring Framework'te beans.xml içinde güzel güzel tanımlıyorduk ama Java EE'deki beans.xml Spring'tekiyle pek fazla benzeşmiyor. Producer metot yazmak çok basit, nesnenizi üreten metodun başına @Produces ekleyerek producer metodunu yazmış oluyorsunuz, tabi bir de bu metodun içinde bulunduğu nesnenin de yine CDI container'i tarafından yönetilen bir nesne olması lazım (yani sınıfın başında @Singleton gibi bir annotation bulunması gerek).
Buraya kadar anlattıklarımı zaten GitHub'daki kodu incelediğinizde kolayca görebileceksiniz. Bir de eğer projenizde bir injection için kullanılabilecek birden fazla kaynak bulunuyorsa (yani mesela hem sınıfınız container tarafından yönetiliyor hem de o sınıf için bir producer metot tanımlanmışsa) bu takdirde hangi kaynak kullanılarak injection yapılacağı anlaşılamıyor. Bunu aşmak için de quantifier annotationlar oluşturup kullanabiliyorsunuz. GitHub'a gönderdiğim kodda quantifier örneği yok, internette arayıp bulabilirsiniz. Ya da belki başka bir zaman onun da örneğini paylaşırım.
Kolay gelsin.

Hiç yorum yok:

Yorum Gönder