Ortam Kurulumu ve Hello Spring Örneği
GNU/Linux ekosistemini tanımak adına çalışmalarımı Oracle VM VirtualBox - Ubuntu 20.04 dağıtımı üzerinden yürütüyorum. Bu ay başında Raspberry Pi 400 tanıtıldı ve ülkemizde de satışa sunulur sunulmaz alıp, eğitime bu küçük bilgisayardan devam etmeyi düşünüyorum. $100'lık bir bilgisayarınızın olduğunu hayal edin ancak TL’ye çevirince tadınız kaçabilir. Amacınız Linux’ü daha iyi deneyimlemek ise bu gerçekten güzel bir fırsat çünkü kullananlar bilir, sanal makine üzerinde çalışmak insanı bazen çileden çıkartabiliyor. Bu arada eğitimde Linux’ten farklı olarak Windows işletim sisteminde de gerçekleştirilmesi gereken ayarlamalara yer vereceğim, sonuçta ben de halen bir Windows kullanıcısıyım. “GNU mu o da ne?”
diyen arkadaşlar için çok da mühim olmayan bu giriş yazısından sonra hazırsanız eğitime başlayalım. (Ubuntu’da Google Chrome kullanan biri olsam da, GNU-Linux
ve felsefesini araştırmanızı tavsiye ederim.)
Spring Framework ile geliştirme yapabilmek için sistemimiz üzerinde öncelikle ortam kurulumunu gerçekleştirmemiz gerekiyor. Kurulum için gerekli adımlar aşağıda listelenmiştir.
1 - Java Development Kit (JDK) Kurulumu
Oracle JDK ile OpenJDK arasındaki farkı anlamak için aşağıdaki yazıyı okumanızı tavsiye ederim:
Linux/Ubuntu dağıtımı kullandığım için repo’sunda standart olarak gelen OpenJDK’yı kullanmayı tercih ettim ancak OpenJDK, Windows işletim sisteminde de kullanılabilir.
Son JDK sürümünü OpenJDK sitesinden indirebilirsiniz. Windows işletim sistemi kullanıyorsanız, site içerisinde seçtiğiniz JDK sürümünün ilgili .zip dosyasını indirin. Daha sonra, indirilen dosyayı C:\Program Files\Java\ gibi bir klasöre çıkartın. Bu konumda dosya çıkarma işlemi için sistem, yönetici izni isteyebilir.
PATH ayarı için aşağıdaki adımları takip ediniz:
- Denetim Masası > Sistem ve Güvenlik > Sistem > Gelişmiş Sistem Ayarları yolundan Ortam Değişkenleri’ni seçiniz.
- İndirdiğiniz JDK bin yolunu Sistem Değişkenleri’ndeki PATH değişkenine ekleyin. Bu bin yolunu en üste taşırsanız daha iyi olur.
- JDK 15 için örnek yol şu şekilde: C:\Program Files\Java\jdk-15\bin
Tomcat web sunucusu, Java EE uygulama sunucuları veya paket yönetim araçları (Maven) Java’nın nerede kurulu olduğunu bilmek ister bu nedenler Sistem Değişkenleri altında JAVA_HOME adında bir değişken tanımlanır. Bu değişkene JDK’nın kurulu olduğu yol (\bin’in bir üst yolu) verilir.
- JDK 15 için örnek yol şu şekilde: C:\Program Files\Java\jdk-15
Değişiklikleri görmek için komut istemcisine (CMD Prompt): java -version komutunu yazınız.
Bu işlemlerin tersini gerçekleştirerek de JDK’yı sistemden kaldırabilirsiniz.
Debian/Ubuntu 20.04 dağıtımında standart JDK sürümü olan OpenJDK 11'i yüklemek için terminal’e: sudo apt install openjdk-11-jdk
komutunu yazmanız yeterlidir. Bu komut OpenJDK’yı /usr/lib/jvm
dizinine kurar.
PATH ve JAVA_HOME ayarı için aşağıdaki adımları takip ediniz:
home → .bashrc dosyasının en son satırına aşağıdaki komutları ekleyiniz.
JAVA_HOME=”/usr/lib/jvm/java-11-openjdk-amd64"
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
Ayarlardan gizli dosyaların da görüntülenmesini sağlayabilirsiniz. Daha sonrasında normalde Linux tarafından sisteme giriş (log in) sırasında okunan .bashrc dosyasını source .bashrc
komutuyla tekrar yüklenmeye (okunmaya) zorlayın.
İşlemlerin doğruluğunu kontrol etmek adına terminal’e: java -version
komutunu yazınız.
Sistemden OpenJDK’yı kolay yoldan kaldırmak için aşağıdaki komut kullanılabilir: sudo apt-get purge — auto-remove openjdk*
2 - Spring Tool Suite 4 Kurulumu
Bu eğitimde, ileride Spring Boot ile de geliştirme yapacağımızı düşünerek Eclipse tabanlı Spring Tool Suite 4 kullanmayı tercih ettim ancak bunun dışında IntelliJ IDEA veya sadece Eclipse’i de kullanabilirsiniz. İndirdiğiniz dosyayı kolayca erişebileceğiniz bir yere ekleyiniz.
- C:\Program Files\SpringToolSuite-4.7.2.RELEASE şeklinde örnek verilebilir.
Daha sonra çift tıkla .jar dosyasını çalıştırın, indirilen dosyayı bir klasöre çıkaracaktır. Eğer burada bir sorun ile karşılaşırsanız dosyayı: java -jar
komutuyla çalıştırmayı deneyin.
Linux için, indirilen .tar.gz uzantılı dosyayı sisteminizde uygun bir dizine çıkardıktan sonra IDE’yi kullanmaya başlayabilirsiniz. Dilerseniz hızlı erişim için aşağıdaki komutları uygulayarak menü ikonu oluşturabilirsiniz:
sudo nano /usr/share/applications/STS.desktop
Exec ve Icon değişkenlerine Spring Tool Suite’i eklediğiniz yolu veriniz.
[Desktop Entry]
Name=Spring Tool Suite
Comment=Spring Tool Suite 4.9.0
Exec=/home/barisdalyan/SpringToolSuite/sts-4.9.0.RELEASE/SpringToolSuite4
Icon=/home/barisdalyan/SpringToolSuite/sts-4.9.0.RELEASE/icon.xpm
StartupNotify=true
Terminal=false
Type=Application
Categories=Development;IDE;Java;
3 - Spring Framework Kütüphanesi
Şimdi de Spring kütüphanesini ilgili adresten:
en güncel sürümü seçerek, dist.zip dosyasını sistemimize indirelim. Bu dosyayı uygun bir konumda klasöre çıkartıyoruz. Ben Windows’ta SpringLibs adında bir klasöre, Linux’da ise aşağıda görüldüğü gibi Desktop’da Spring adında bir indeksin içine ekledim.
İlk Spring Projemiz
Spring Framework ortam kurulumunu gerçekleştirdiğimize göre artık Spring uygulamamızı yazmaya başlayabiliriz. Bu uygulama çıktı olarak, bize bir mesaj verecek. Ben mesaj olarak “Hello Spring!” yazmasını istedim, bu herhangi bir mesaj olabilir. Mesajı yazdırmak için Beans.xml dosyasında gerekli yapılandırmalar gerçekleştirildi.
1 - Spring Projesi Oluşturma
Spring Tool Suite üzerinde File → New → Java Project adımlarını takip ederek gelen pencerede, proje ismi olarak HelloSpring yazıyoruz.
2 - Gerekli Kütüphane Dosyalarını Ekleme
Spring kütüphanesini IDE’mizde Classpath’e eklemek için HelloSpring projemizin üzerine gelip sağ-tıklayarak Build Path → Configure Build Path → Libraries seçeneklerini takip ediyoruz. Burada Add External JARs diyoruz ve daha öncesinde eklediğimiz Spring kütüphanesi klasörü, /libs dizinine ilerleyip içindeki .jar dosyalarının tamamını seçiyoruz. Son adımda Apply and Close deyip pencereyi kapatıyoruz.
3 - Main Java Dosyasını Oluşturma
Projenin kaynak dosyalarını eklemek için src üzerinde sağ-tıklayıp New → Package adımlarını takip ederek, gelen pencerede paket adına springtutorial diyoruz. Sonraki adımda bu paket altına HelloSpring.java ve MainApp.java adında iki sınıf tanımlıyoruz.
HelloSpring.java sınıfı aşağıda yer almaktadır.
MainApp.java sınıfı aşağıda yer almaktadır.
Aşağıda MainApp ile ilgili önemli noktalara yer verilmiştir:
- Bir uygulama context’i yaratmak için Spring Framework içindeki ClassPathXmlApplicationContext() sınıfı kullanıldı. Bu sınıf bean yapılandırma dosyasını yükler. Bu dosyadan elde ettiği metadata’ya (bir işlemin nasıl yapılacağını tanımlayan parametre/veri hakkında veri) göre nesneleri (bean’leri) oluşturur ve başlatır.
- Oluşturulan context’in getBean() metodu istenilen bean’i getirmek için kullanıldı. Bu metot cast edilebilen generic bir nesne döndürebilmek için bean ID’sini kullanır. Bu nesneyi oluşturduktan sonra istenilen sınıf metotlarına erişilebilir. (Erişim belirleyicisine göre bu durum değişebilir.)
4 - Bean Yapılandırma Dosyası Oluşturma
Bir XML dosyası olan Bean yapılandırma dosyasını oluşturmak için src altına Beans.xml dosyası oluşturuyoruz. Bu geleneksel bir isimlendirmedir ancak bu dosyanın applicationContext.xml olarak isimlendirilmiş haliyle de karşılaşabilirisiniz. Bu dosya, bean’leri yani sınıfları birbirine bağlamaya yarar. Dependency Injection’ı hatırladınız mı?
Beans.xml yapılandırma dosyasının Classpath içerisinde tanımlı olması ve MainApp.java dosyasında gösterildiği gibi, uygulama context’ine aynı isimde geçirilmesi gerekir.
Burada Beans.xml, bean’e onu diğer bean’lerden ayıran eşsiz (unique) bir ID değeri atanmasını ve Spring kaynak dosyalarını etkilemeden nesnelerin farklı değerler atanarak oluşturulmasını sağlar. Örneğimizde de olduğu gibi HelloSpring.java ve MainApp.java dosyalarını etkilemeden, istediğimiz mesajı message değişkenine atayarak yazdırabiliriz.
Beans.xml dosyasını aşağıda daha detaylı inceleyebilirsiniz.
Öncelikle XML dosyası içerisindeki ilk beş satıra açıklık getirmek istiyorum:
- İlk satırda yazılan ifade bir XML tanımlayıcısıdır ve genelde IDE ile oluşturduğumuzda dosya başına ekli gelir.
- XML’de XSD (XML Schema Definition) yapısı ile belirli standartlar oluşturulabilir. Bu standartlar, etiket (tag) içeriği veya etiket özelliği değeri için veri türünde kısıtlama şeklinde olabilir. Namespace (ad uzayı) ve prefix’ler (takma ad - önek) ile isim karışıklığı engellenebilir (name confliction).
- XML’de prefix kullanırken, prefix için bir namespace tanımlanmalıdır.
xmlns:prefix=“URI”
şeklinde bir sözdizimi vardır. Bu prefix alt elemanlarda da kullanıldığından başka bir XML elemanları ile çalıştığımızda aynı isimde elemanların olması durumunda oluşabilecek isim karışıklığı, unique namespace’leri temsil eden bu prefix’ler aracılığıyla engellenir.“xmlns”
özelliği ile bir etiket (eleman) için default namespace tanımladığımızda, o etiket altındaki elemanlar için de prefix tanımlamamıza gerek kalmaz.- 2. satırda kullanılarak
<beans>
etiketi altındaki elemanlar için default namespace oluşturulmuş oldu. xmlns:xsi
XSD’de kullanılan core namespace için prefix tanımlaması yapar:http://www.w3.org/2001/XMLSchema-instance
(3. satır) Bu da bize XML doküman içinde kullanabileceğimiz çeşitli özellikler sağlar.xsi:schemaLocation
bu özelliklerden biridir: Spring, Java XML ayrıştırıcısını (parser) kullanarakschemaLocation
değerini okur ve internetten .xsd dosyasını yükleyerek XML dosyasında kısıtlamalara uyulup uyulmadığını kontrol eder. Aralarında bir boşluk olacak şekilde namespace URI ve namespace’in xsd-schema dosyası için schema location link değerini alır. (4. satır)xsi
geleneksel bir önek’tir ve pratikte bunu yerine herhangi bir önek yazılabilir.
Spring uygulamamız belleğe yüklendiğinde, Framework tanımlı olan tüm bean’leri oluşturmak için yukarıdaki yapılandırma dosyasını kullanır ve <bean> etiketinde olduğu gibi eşsiz ID değerlerini atar. Tabii biz bu örnekte sadece bir tane bean oluşturduk ve ona “ helloSpring” ID değerini atadık. <property> etiketini de HelloSpring sınıfının “message” değişkenine değer atamak için kullandık.
Tüm bu işlemleri tamamladıktan sonra IDE üzerinde Run butonuna tıklayarak veya Ctrl + F11 tuş kombinasyonu ile Spring uygulamasını başlatabiliriz.
Output:
Your Message : Hello Spring!
Bu temel eğitim serisini bitirdikten sonra işler yolunda giderse Spring Boot için de bir seri oluşturmayı düşünüyorum. Spring Boot ve Maven paket - proje yönetim aracı ile yukarıda manuel olarak oluşturduğumuz altyapıyı Spring Initializr’dan kolayca hazırlayabileceğiz ancak ben “Bir şeyi öğreneceksen temelden, tam öğren!” motto’sunu savunduğum için önce Spring öğrenmeye başladım. Bu arada bu sözü ben uydurdum.
Görüş ve önerileriniz benim için önemli sonraki yazıda görüşmek üzere.