Spring, J2EE uygulamaları geliştirmede kullanılan uygulama çatılarından (application framework) biridir.
Amaç:Spring core paketi, Spring’in temelini olusturur. Bağlaşım kesme gibi temel fonksiyonlar Spring Core içinde implemente edilmiştir.
Spring AOP: Spring’in AOP özellikleri direk kullanılmasada, deklaratif transaksiyon ve güvenlik uygulamalarında Spring AOP , Spring Core tarafından dolaylı olarak kullanılır.
Spring MVC: Spring MVC (Model-View-Controller) Spring baz alınarak web tabanlı programlar oluşturulabilir. Spring MVC bir web frameworküdür.
Spring Context: ApplicationContext ve WebApplicationContext gibi sınıflar bu modülde implemente edilmiştir. XML dosyalarından bulunan Spring bean tanımlamalarını okumak ve Spring bean nesnelerini oluşturmak için kullanılırlar.
Spring DAO (Database Access Object): Bilgi bankaları üzerinde işlem yapmak için kullanılan JDBC teknolojisini kullanımda daha basit hale getiren sınıflar bu modül içinde yeralır.
Spring ORM (Object Relational Mapping): Bu modül Hibernate, JDO, TopLink ve IBatis gibi popüler ORM frameworkler ile entegrasyonu sağlamaktır.
Kontrolün tersine çevrilmesi manasına gelir. IoC için güvenli bir container gerekir.(org.springframework.beans.factory.BeanFactory ) Spring IoC container sayesinde nesnelerin hayat döngüsü yönetimi, bağımlılıkların yönetimi, konfigürasyonu (bir bütün halinde çalışma), tasarım kalıplarının kullanımı sağlar.
Bağımlılıkları ortadan kaldırmak şeklinde ifade edilebilir. Nesneler arası bağlar XML konfigürasyon dosyaları üzerinden otomatik gerçekleştirilir. Örneğin: ClassA sınıfı ClassB tipinde bir değişkene sahip olsun. Bu bağımlılık Spring tarafından ClassA dan nesne oluşturulurken göz önünde bulundurulur. Spring otomatik olarak ClassB sınıfından nesne oluşturarak ClassA sınıfından oluşturduğu nesneye enjekte eder.
Bağımlılık tanımları kod bölümünden çıkarılarak IoC prensibini kullanan container’a sunulur. Uygulamayı tekrardan derlemeden değişiklikler ele alınabilir. Bileşenler çalışma anında elde edilerek, bileşenler arası ilişkiler dinamik bir yapı kazanır.
Kesim yönelimli programlama olarak türkçeye çevirebiliriz. Amaç: Uygulamalara modülerlik kazandırmak.
Program çerçevesinde yer almak zorunda olmayan bazı metot (transaction, logging vb.) ve modülleri bir yerde toplayarak programdan bağımsız bir yerde implemente eder.
IoC container’ a bir şeyler yaptırmak için ‘Metadata Konfigürasyon’ u gerekir.
-Birden fazla bean kullanılabilir. Aynı XML dosyasında aynı bean id birden fazla kullanılamaz. Tüm beanler default olarak Singleton olarak oluşturulur.
-Spring IoC container nesneleri oluştururken 3 teknik kullanır.
Genel bir örnek üzerinde bu yapıları incelersek;
Kodu açıklarsak; İlk olarak “constructor” kullanarak, “Company” adlı classdan id’si “company” olan bir Ioc nesnesi oluşturduk. Ve bu sınıfın yapıcı metoduna(constructor) parametre olarak başka bir bean id’yi(id=”myCustomer” olan sınıfı) referans verdik. İkinci parametre olarakta parametre ismi “since” olan argümana value olarak belirtilen değeri atadık.
“myCustomer” id’sine sahip “Customer” sınıfının sahip olduğu setter metodları kullanılarak sınıf içerisindeki instance variables değerini <property>
tagı ile belirtmiş olduk.”Address” sınıfı cinsindeki “address” değişkenine bean id’si “myAddress” olan nesneyi injection ettik.
“Address” sınıfı bir yapıcı metoda sahip fakat bu seferen parametre almamaktadır. Bu yüzden constructor yöntemi kullanılarak nesnesini oluşturmamız yeterli oldu. Gerekli class kodları aşağıdaki şekilde yaratılabilir.
Temel tipler için otomatik değer çevirme mevcuttur.
P-namespace : Daha kısa bir Spring dosyası elde etmemizi sağlar. p:degiskenAdi= “value”
C-namespace : Constructor içindir. P-namespace ile aynı şekilde kullanılır.
Belirli taglar içerisinde List, Set, Map, Properties data tipleri kullanılabilir.
Metadata bilgisinde ‘lazy-init=true’ ifadesi bulunan bean ler program içerisinde ne zaman gerekli olursa o zaman nesnesi yaratılır.
Scope : Bean lerin kapsam, faaliyet ve kullanım alanlarını belirtir.
Singleton Scope: Bean nesne sadece bir kere oluşturulur ve her sorgulamada bu nesne kullanılır.
Prototype Scope: Bean nesnesi her sorgulamada oluşturulur ve aynı nesne kullanılmaz.
*** ‘web.xml’ dosyası içerisinde, kullandığımız web servlet container sürümüne göre değişiklikler yapmalıyız. Örneğin Servlet 2.4 ve daha yeni web container için:
Spring, sınıf ve içindeki tüm metotları container olarak görür.
@Bean : Her bir metodun bean olarak gözükmesini sağlar.
@Autowired : Gerekli olan bean i otomatik olarak bulur.
@Resource : Autowired anotasyonu ile aynıdır. Ek olarak kullanılmasını istediğimiz bean ismini belirtebiliriz.
@ImportResource : Xml dosyası ile configuration dosyasını birleştirir.
@Value : Properties dosyası içerisindeki verileri otomatik olarak almamızı sağlar.
Örneğin: @Value(“${variableName}”)