Spring Framework

KONU BAŞLIKLARI

  • Spring Framework Nedir?
  • Inversion of Control (IoC)
  • Dependency Injection (DI)
  • Aspect Oriented Programming (AOP)
  • Neden Spring Framework?
  • XML Konfigürasyon Kullanımı
  • Spring XML Dosyasını Tanıyalım
  • Değişkenleri Data Tiplerine Bağlama
  • Java Collections Kullanımı
  • Web Scopes
  • Temel Anotasyonlar
  • Spring Framework Nedir?

    Spring, J2EE uygulamaları geliştirmede kullanılan uygulama çatılarından (application framework) biridir.

    Amaç:

    Spring Framework Modüler Yapısı

    Spring Core:

    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.

    Inversion of Control (IoC)

    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.

    Dependency Injection (DI)

    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.

    Aspect Oriented Programming (AOP)

    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.

    Neden Spring Framework?

    XML Konfigürasyon Kullanımı

    IoC container’ a bir şeyler yaptırmak için ‘Metadata Konfigürasyon’ u gerekir.

    * XML kullanımı (Sınıf dosyaları değişmez.)
    * Java kullanımı (Sınıf dosyaları değişmez fakat ek konfigürasyon dosyaları gerekir.)
    * Anotasyonlar (Sınıf dosyaları değişmez.)

    Spring XML Dosyasını Tanıyalım

    -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.

    1. Constructor kullanarak
    2. Static Factory metodu
    3. Instance Factory

    -Spring IoC Dependency Injection Teknikleri:
    1. Constructor kullanarak
    2. Setter metodu yardımıyla

    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.



    Değişkenleri Data Tiplerine Bağlama

    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.

    Java Collections Kullanımı

    Belirli taglar içerisinde List, Set, Map, Properties data tipleri kullanılabilir.

    List :

    Map :

    Set :

    Lazy kullanımı :

    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 Scopes

      Temel 3 web scopes vardır.
    1. Request
    2. Session
    3. Global Session

    *** ‘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:


    Temel Anotasyonlar

    @Configuration :

    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}”)

    Özgürce...