Spring Giriş Eğitimi - Blog

advertisement
Spring Giriş Eğitimi
Bu eğitimde Spring ‘ın hangi problemlere karşı etkili olduğundan bahsedeceğim. Ayrıca
çekirdek Spring teknolojisinin nasıl işlediği; Dependency Injection - DI ve Inversion of Contol
kavramlarını basit bir örnek üzerinden anlatacağım.
Problem
Spring açık kaynak kodlu, kurumsal uygulamaların karmaşıklığını gidermek için ortaya çıkmış
bir projedir. Bu karmaşık problemlerden bahsedelim :
●
●
●
●
Bağlaşım kesme problemi
Transaction desteği (Veritabanı işlemleri için şart)
Güvenlik alt yapısı (Hak hukuk ayarlamaları için )
Dağıtık programlama ihtiyacı (Özellikle yoğun trafik alan uygulamalar için çok önemli)
Tarihçe
Aslında konuyu daha iyi anlamak için biraz daha geriye gidelim; 1998 yılında Sun
Microsystems’ın ortaya koyduğu Enterprise Java Beans 1.0 sürümü (namı diğer EJBs) başlıca
yukarıdaki problemlere derman olması için yayınlandı. Fakat gel gelelim EJB teknolojisini
projelerde uygulamak ciddi anlamda karmaşıklık getiriyordu. Daha da kötüsü kodun gereksiz
yere büyümesine sebebiyet veriyordu. Bunun doğal sonucu olarak da EJB teknolojisi zaman
içerisinde popülerliğini kaybetti. Yanlız 2011 yılında EJB light-weight sürümü ile tekrardan çıkış
yakalama çabasında olduğunu belirtmek isterim.
Spring Teknolojileri ve Genel Mimari
İşte Spring; kurumsal uygulamaların bu karmaşık ihtiyaçlarına cevap verebilen bir altyapıdır;
Günümüzde Spring doğal olarak çok daha fazla probleme çözüm oluyor. İşte Spring yapısının
genel mimarisi :
Çekirdek Spring‘in en temel fonksiyonu Inversion of Control ve DI (Dependency Injection)
kavramlarını gerçekleştirmektir.
Proje ve Apache Maven
Kod örneklerinin detaylarına aynı sayfadan kod.zip dosyasını indirerek ulaşabilirsin.
Bu proje Apache Maven tabanlıdır. Eğer Apache Maven bilmiyorsan çok kısa bir sürede
Maven ‘ı öğrenmek için Kodcu.com içerisindeki Maven videolarını izlemeni tavsiye ederim.
Google’dan “kodcu Maven” diye aratınca ilgili video karşına hemen çıkacaktır.
Spring-giris projesi konsoldan çalışabilecek çok basit bir Spring uygulamasıdır. Amacı
Spring’in en yalın halini ve etkilerini göstermektir. Not : Bu uygulamayı IntelliJ 10 sürümünde
geliştirilmiştir.
Proje içerisinde Gorev ve Memur adında iki adet interface sınıfı tanımlıdır. Buradaki amacım
hangi memura hangi görevin gideceğini belirlemek fakat esas dikkat edilmesi gereken nokta;
Gorev sınıfının alt elemanlarıyla, Memur sınıfının alt elemanları arasındaki bağı Spring ile
keşmiş nasıl kestiğimdir. İşte Detaylar :
Gorev.java
Interface kavramı uygulamanızı esnek hale getirmek için eşsiz mekanizmalardır. Şimdi Gorev
sınıfından türeyen iki alt sınıfa bakalım
GuvenlikGorevi.java
OkulGorevi.java
Buraki Gorev sınıfını bir anlaşma / sözleşme gibi düşünebilirsin. OkulGorevi ve GuvenlikGorevi
sınıflarını da bu sözlesmenin (Gorev.java) yüklenicileri olarak hayal edebilirsin. Uygulama
çalıştığında ihtiyaca göre hangi yükleniciye ihtiyaç varsa Spring bunları otomatik olarak
oluşturacak ve iletecektir.
Memur.java
Ogretmen.java
Öğretmen sınıfı yapılandırıcısına (satır 9) Gorev tipinde bir değişken alıyor. Aa ha ! İşte buraya
çalışma anında kaç farkı nesne gelebilir ? Cevap :2
1 - OkulGorevi
2 - GuvenlikGorevi
Hangisinin geleceğin kodcu.xml (biraz daha aşağıda) dosyasından belirteceğiz. İşte Inversion
of Control ve DI (Dependency Injection) kavramları devreye girdi bile !
Peki esas sorumu soruyorum; Ogretmen hangi gorevin geleceğinden haberdar mı ? Ya da şöyle
sorayım Ogretmen sınıfı çalışma anında hangi nesnenin geleceği umrunda mı ? Değil. İşte buna
bağlaşımı kesmek denir. (decoupling) .
Polis.java
Memur, Ogretmen ve Polis arasındaki ilişki; Gorev, OkulGorevi ve GuvenlikGorevi sınıflarından
farklı değil
Main.java
Bu test etmek için kullanılan basit bir sınıf. Dikkat edilirse 17. satırda Spring yapısı ayağa
kaldırılıyor. Bu işlem sırasında kodcu.xml içerisindeki tanımlamalar esas alınacaktır. Ekran
çıksı ne olur ?
kodcu.xml
Spring yapısını kontrol ettiğimiz dosya kodcu.xml. Dikkat edilirse Ogretmen ve OkulGorevi
sınıfları Spring tarafından oluşturuluyor yanı kontrolü Spring yapısına verdik işte buna basitçe
Inversion of Contol denir; yani kontrolü devir teslim etmiş bulunuyoruz.
Uygulamayı çalıştırmak için
Bu uygulama maven tabanlı olduğu için istediğiniz maven destekli IDE’de açabilirsiniz. IntelliJ ,
Eclipse veya Netbeans.
Sonuç
Şimdi diyebilirsin ki; Ogretmen sınıfının yapılandırıcına Gorev atmak için bu kadar eziyete ne
var ? Ufak uygulamalarda Spring’in faydası görülmeyebilir. Zaten her uygulama da Spring alt
yapısını kullanmak doğru olmayabilir. Fakat şöyle düşün; Spring en başta bir Interface kullanma
zorunluluğu getiriyor, bir disiplin. Ayrıca uygulama büyüdükçe sınıfların karmaşıklığını Spring
ile çok rahat ve güvenli bir şekilde yönetebilirsin. Bu örnek üzerinde konuşursak Ogretmen ve
OkulGorevi sınıflarına ait nesne Spring tarafından oluşturuluyor ve yönetiliyor. Uygulamanın
karmaşıklığı artsa da Spring alt yapısı size güvenli bir ortam sunmaya devam edecektir.
Aynı şekilde kodcu.xml içerisindeki 8 satıra bakacak olursanız OkulGorevi nesnesi Ogretmen
nesnesine zerk ediliyor. Zerk (Dependecy Injection - DI) kavramının somut işleyişini buradan
açık bir şekilde görülebilir.
Bu ayar işlemlerini xml dosyasını içerisinden yapmaMA şansımız elbette var. Bu konuyu bir
sonraki ders içerisinde anlatmaya çalışacağım.
Spring her ne kadar Java dünyasından çıkmış bir alt-yapı olsa da, Microsoft .NET dünyasındaki
uygulamalar içinde çözüm sunmaktadır. Detaylı bilgi için http://www.springframework.net/
adresini ziyeret edebilirsin.
Bu yazıyla Spring felsefesini ve yapısını başlangıç düzeyinde de anlatmaya çalıştım. Bir sonraki
ders görüşmek üzere.
İyi çalışmalar...
Altuğ Bilgin Altıntaş
altug - at - kodcu.com
Download