Merhaba arkadaşlar,
Mobilhanem.com üzerinden yayınladığımız Spring Dersleri‘ne kaldığımız yerden devam ediyoruz. Önceki dersimizde Spring ile ilk Hello World uygulamamızı yazmış, konsolda çıktımızı görmüştük. Bu dersimizde yine aynı uygulama üzerinden gideceğiz. Yalnız bu sefer Xml dosyası kullanmadan konfigürasyonumuzu yapacağız ve Spring’de java tabanlı konfigürasyon nasıl yapılır görmüş olacağız.
Spring’de Java Tabanlı Konfigürasyon
Uygulamamız, bir önceki derste yaptığımız uygulamanın aynısı olacak. Aynı şekilde bean tanımımızı yapıp, konsol üzerinden mesajımızı göreceğiz. Başta da belirttiğimiz gibi tek fark bu sefer uygulamamızda XML dosyası kullanmak yerine, konfigürasyon sınıfı yazacağız. Değişikliğimiz konfigürasyon aşamasında olacağı için bir önceki dersimizde XML dosyasını oluşturduğumuz aşamaya kadar tekrar geleceğiz. Bu aşamaların üzerinden bu derste tekrar geçmeyeceğiz. Konfigürasyon aşamasına kadar geldikten sonra devam etmeden önce Java tabanlı konfigürasyon yapabilmek için bilmemiz gereken bir konu var: Anotasyonlar.
Anotasyon Nedir?
Anotasyonlar metadata, konfigürasyon bilgisi gibi verileri kodumuza eklememize imkan tanır. Anotasyonlar Java 5’ten bu yana desteklenmektedir ve kodda gerçekleştirilen işlemlere direk bir etkisi yoktur. Sınıflar, arayüzler, metodlar ve fieldlar için anotasyonlar kullanılabilir. Daha iyi anlayabilmek adına Javada sıklıkla kullanılan bir anotasyon örneği üzerinden gidelim.
public class ParentClass {
public void aMethod() {
System.out.println(“Parent class method”);
}
}
public class ChildClass extends ParentClass {
@Override
public void aMethod() {
System.out.println(“Child class method”);
}
}
public class ParentClass { public void aMethod() { System.out.println(“Parent class method”); } }
public class ChildClass extends ParentClass { @Override public void aMethod() { System.out.println(“Child class method”); } } |
Çocuk sınıfta aMethod metodunun üstünde belirttiğimiz @Override bir anotasyondur. Anotasyonlar örnegimizdeki gibi @ sembolü ile başlar, anotasyonun adıyla devam eder. Compiler @ sembolünü gördüğü anda bir anotasyon okuyacağını anlar. Bu örneğimizde çocuk sınıfta override ettiğimiz metodu @Override anotasyonuyla belirtiyoruz. @Override anotasyonunun kullanımı zorunlu olmamakla beraber, kod okunabilirliği, bakım kolaylığı, ata sınıfta yapılacak herhangi bir değişiklik durumunda hatalardan kaçınma gibi noktalarda kullanışlı olmaktadır.
Konumuz anotasyonlar olmadığı icin daha fazla detaya girmeyeceğiz. Arzu edenler Java Predefined Annotation Types sayfasından Java da tanımlı anotasyonları daha detaylı inceleyebilirler.
Spring’de Anotasyonlar
Spring Xml tabanlı konfigürasyonla yola çıkmıştır ancak kullanıcılarının sayısının artması ve birçok geliştiricinin xml dosyalarıyla uğraşmayı sevmemesi spring konfigürasyonu için alternatifler aranmasına sebep olmuştur. Bu noktada Spring anotasyon tabanlı konfigürasyon seçeneğini geliştiricilere sunmuştur. Spring anotasyonlarını tek tek incelemek için ayrı bir ders başlığı açmamız gerekir. Onun yerine anotasyonları kullandıkça ne olduğunu öğreneceğiz.
Konfigürasyon Sınıfı
Bir önceki dersimizden konfigürasyon aşamasına kadar geldik. com.mobilhanem -> new -> package üzerinden com.mobilhanem.config isimli bir package ekliyoruz. Konfigürasyon sınıfımızı bu pakette yaratacağız. Xml dosyası yerine bu paketin altına yeni bir Java sınıfı yaratıyoruz. Sınıfımıza HelloSpringConfiguration adını verdik. Sınıfa ait kodları aşağıdan alabilirsiniz.
package com.mobilhanem.config;
import org.springframework.context.annotation.*;
import com.mobilhanem.HelloSpring;
@Configuration
public class HelloSpringConfiguration {
@Bean
public HelloSpring createHelloSpringBean(){
return new HelloSpring();
}
}
package com.mobilhanem.config;
import org.springframework.context.annotation.*; import com.mobilhanem.HelloSpring;
@Configuration public class HelloSpringConfiguration { @Bean public HelloSpring createHelloSpringBean(){ return new HelloSpring(); } } |
Bu konfigürasyon sınıfımızda 2 adet anotasyon kullandık: @Configuration ve @Bean. @Configuration anotasyonu bulunduğu sınıfın Spring için bir konfigürasyon sınıfı olduğunu, bu sınıf içinde bir veya birden fazla bean tanımlaması yapılabileceğini belirtir. @Bean anotasyonu ise application contexte return tipinde belirtilen tipte bir objenin bean olarak ekleneceğini belirtir. Süreç akışı ise şu şekilde olacaktır:
- Spring ayağa kalkarken @Configuration anotasyonunu görür
- Bu sınıfın bir konfigürasyon sınıfı olduğunu anlar
- @Bean anotasyonlarını aramaya başlar
- @Bean anotasyonuyla belirtilen metodların return tipindeki objeleri application contexte bean olarak ekler
Konfigürasyon sınıfımızda createHelloSpringBean metodunda basit bir şekilde HelloSpring objesi yarat ve bu objeyi dön dedik. Metod üstüne yerleştirdiğimiz @Bean anotasyonu sayesinde HelloSpring objesi bean olarak eklenecektir.
Main Sınıfı
Sınıflarımız hazır ancak kodumuz henüz çalışır durumda değil, Main sınıfımızda yapmamız gereken değişiklikler var. XML tabanlı konfigürasyon yaptığımız uygulamada xml dosyasını oku, şu id ile beani al diyorduk. Şimdi aynı işlemi Java konfigürasyon sınıfımız için yapacağız. Eski Main sınıfımız şu şekildeydi:
package com.mobilhanem;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
class Main {
private static ApplicationContext context;
public static void main(String[] args) {
context = new ClassPathXmlApplicationContext(“ApplicationContext.xml”);
HelloSpring helloSpringObject = (HelloSpring) context.getBean(“helloSpring”);
helloSpringObject.getMessage();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.mobilhanem; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; class Main { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext(“ApplicationContext.xml”); HelloSpring helloSpringObject = (HelloSpring) context.getBean(“helloSpring”); helloSpringObject.getMessage(); } } |
Yeni Main sınıfımız ise şu şekilde olacak:
package com.mobilhanem;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.mobilhanem.config.HelloSpringConfiguration;
class Main {
private static ApplicationContext context;
public static void main(String[] args) {
context = new AnnotationConfigApplicationContext(HelloSpringConfiguration.class);
HelloSpring helloSpringObject = context.getBean(HelloSpring.class);
helloSpringObject.setMessage(“Hello World!”);
helloSpringObject.getMessage();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com.mobilhanem;
import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.mobilhanem.config.HelloSpringConfiguration;
class Main {
private static ApplicationContext context;
public static void main(String[] args) {
context = new AnnotationConfigApplicationContext(HelloSpringConfiguration.class);
HelloSpring helloSpringObject = context.getBean(HelloSpring.class);
helloSpringObject.setMessage(“Hello World!”); helloSpringObject.getMessage(); } } |
Bir önceki uygulamada yaptığımız işlemlerin aynısı yaptık. İki noktada fark var. Birincisi artık xml üzerinden değil java sınıfımız üzerinden konfigürasyon bilgisini aldık. Bunun için ClassPathXmlApplicationContext yerine yine ApplicationContext implementasyonlarından biri olan AnnotationConfigApplicationContext kullandık. İkincisi ise bean erişimini id üzerinden değil, konfigürasyon sınıfında belirttiğimiz şekilde HelloSpring objesi üzerinden yaptık.
Artık uygulamamıza Run diyebilir, Console üzerinde “Your Message : Hello Spring!” çıktısını görebiliriz 🙂
Sonuç
Bu dersimizde Spring projelerinden yararlanmak adına bir adım daha attık ve Spring ile Hello World uygulamasını XML dosyası kullanmadan, Java tabanlı konfigürasyon yardımıyla yazdık. Aynı zamanda anotasyonlar ve kullanımları hakkında bilgi sahibi olduk. Önerimiz kendi başınıza yeni beanler ekleyip çıkararak konuyu hazmetmeniz.
Spring kurulumu aşamasında hatırlayacağınız üzere loglama işlemleri için kullanılan Apache Commons Logging kütüphanesini indirmiştik. Önümüzdeki dersimizde bu kütüphane nedir, ne işe yarar, nasıl kullanılır sorularına cevap arayacağız.
Takıldığınız nokta veya noktalar olursa soru-cevaptan sormayı unutmayın 🙂
Tüm Spring Dersleri için tıklayınız…
7