Spring Boot Starter Bağımlılıklar ve Otomatik Konfigürasyon
Spring Boot, modern Java uygulama geliştirme sürecini hızlandırmak için tasarlanmış güçlü bir altyapıdır. Bu makalede Spring Boot’un neden geliştiricilerin hayatını kolaylaştırdığını, starter bağımlılıklarını ve otomatik konfigürasyon mimarisini anlaşılır bir şekilde inceleyeceğiz.
Giriş: Geliştiriciler İçin Otomatik Kapılar
Bir süpermarkete girdiğinde kapıyı elle itmek zorunda kalmadan, otomatik kapıların seni algılayıp açıldığını bilirsin. Modern yazılım dünyasında da benzer bir konfor bekleriz.
Ancak özellikle klasik Spring Framework döneminde işler pek de böyle değildi. Spring ile bir uygulama geliştirirken:
- Bağımlılıkları tek tek eklemek,
- XML veya Java konfigürasyonlarını hazırlamak,
- Sunucu yapılandırmalarını yapmak
tamamen geliştiricinin omuzlarındaydı.
Spring Boot’un amacı tam olarak şudur:
“İş mantığına odaklan, altyapıyı ben hallederim.”
Spring Boot’un Sunduğu İki Büyük Kolaylık
Spring Boot’un başarısının temelinde iki büyük özellik vardır:
1. Starter Bağımlılıklar (Spring Boot Starters)
Spring Boot, bir özelliği kullanmak için gerekli tüm bağımlılıkları tek bir paket altında toplar.
spring-boot-starter-web→ Spring MVC + Tomcat + JSON desteğispring-boot-starter-data-jpa→ Hibernate + JPA altyapısıspring-boot-starter-thymeleaf→ Thymeleaf şablon motoruspring-boot-starter-test→ JUnit + MockMvc + AssertJ
Uyumluluk, versiyon yönetimi, transitive dependency karmaşası artık tarih oluyor.
2. Otomatik Konfigürasyon (Auto-Configuration)
Spring Boot uygulamayı başlatırken classpath’i analiz eder ve gördüğü teknolojilere göre konfigürasyonları otomatik oluşturur.
Örnek:
- H2 classpath’te → otomatik H2 veritabanı ve DataSource oluşturulur.
- Thymeleaf yüklü → view resolver otomatik yapılandırılır.
- Spring MVC var → DispatcherServlet otomatik aktif olur.
- Tomcat bağımlılığı var → gömülü Tomcat ayağa kalkar.
Hiçbir manuel ayara gerek yoktur.
Örnek Uygulama: Reading List (Okuma Listesi)
Spring Boot’u anlamanın en iyi yolu basit bir örnektir. Bu örnekte kullanıcıların kitap ekleyebildiği ve listeleyebildiği küçük bir okuma listesi uygulaması geliştireceğiz.
Kullanılan Teknolojiler
- Spring MVC
- Thymeleaf
- Spring Data JPA
- H2 Database
- Gradle
- Java
Spring Initializr ile Proje Yapılandırma
Aşağıdaki bağımlılıkları seçiyoruz:
- Web
- Thymeleaf
- JPA
- H2
Spring Boot otomatik olarak:
- standart klasör yapısı,
- build dosyaları (pom.xml veya build.gradle),
- ana uygulama sınıfı (
@SpringBootApplication)
oluşturur.
Domain Katmanı: Book Sınıfı
Uygulamanın ana domain'i Book'tur:
id reader isbn title author description
JPA ile entity tanımlamak için:
@Entity@Id@GeneratedValue
kullanmamız yeterlidir.
Repository Katmanı: Spring Data JPA
Spring Data JPA sayesinde repository implementasyonu yazmadan CRUD yapabiliriz:
public interface ReadingListRepository
extends JpaRepository<Book, Long> {
List<Book> findByReader(String reader);
}
Spring Boot bu arayüzü otomatik olarak implemente eder.
Web Katmanı: Controller + Thymeleaf
Controller Ne Yapıyor?
GET /{reader}:
- Repository’den kitapları getirir.
- Modele ekler.
readingList.htmlview’ine gönderir.
POST /{reader}:
- Formdan gelen kitabı kaydeder.
- Kullanıcıyı kendi sayfasına yönlendirir.
Thymeleaf Şablonu
readingList.html içinde:
- Kitap listesi görüntülenir.
- Boşsa “Listede kitap yok” mesajı çıkar.
- Yeni kitap eklemek için form vardır.
Spring Boot otomatik olarak /templates altındaki dosyaları çözümleyip view olarak kullanır.
Static İçerikler: Ek Konfigürasyon Gerekmez
src/main/resources/static altındaki tüm dosyalar otomatik olarak servis edilir:
style.cssscript.js- görseller
Ek bir ayar gerekmez.
Uygulamayı Çalıştırmak
1. Gradle ile
gradle bootRun
2. JAR olarak
gradle build
java -jar build/libs/readinglist-0.0.1-SNAPSHOT.jar
Çalıştırıldığında otomatik olarak:
- Tomcat başlar
- Spring MVC aktif olur
- JPA + H2 yapılandırılır
- Thymeleaf view resolver devreye girer
Arkada Neler Oluyor? (Spring Boot Magic)
Spring Boot uygulama açılırken şu soruları sorar:
- H2 var mı? → DataSource oluştur
- Hibernate var mı? → JPA kur
- Thymeleaf var mı? → View resolver ekle
- Tomcat var mı? → Embedded server başlat
Tüm bu kararları @Conditional anotasyonları ile hesaplar.
Sonuç: Spring Boot ile Kazandıklarımız
- Zaman tasarrufu
- Daha az konfigürasyon
- Daha az hata
- Daha temiz bir proje yapısı
- Doğrudan iş mantığına odaklanma
Ve en önemlisi:
“Kapıyı elle itmek yerine otomatik kapıyı tercih ediyorsun.”