Spring Boot 4.0: Java Ekosistemini Yeniden Şekillendiren Büyük Güncelleme

Kasım 2025'te yayınlanan Spring Boot 4.0, Spring Framework 7 temeli üzerinde inşa edilerek Java geliştiricilerine yepyeni bir deneyim sunuyor.

Spring Boot, uzun yıllardır Java dünyasının vazgeçilmez framework’ü olsa da Spring Boot 4.0 sıradan bir bakım güncellemesinden çok daha fazlası. Jakarta EE 11 uyumu, modüler yapılandırma, native API versioning ve resilience özelliklerinin çekirdeğe taşınması gibi radikal değişikliklerle framework’ün mimarisi kökten yenileniyor.

Bu yazıda, Spring Boot 4.0’ın getirdiği en önemli yenilikleri, migration sürecinde dikkat edilmesi gereken kritik noktaları ve yeni HTTP Service Client özelliklerini detaylı olarak ele alacağız.

1. Jakarta EE 11 ve Servlet 6.1 Uyumu

Spring Boot 4.0, javax.* paketlerini tamamen terk ederek jakarta.* namespace’ine geçiş yapıyor. Bu, Jakarta EE 11 ve Servlet 6.1 standartlarıyla tam uyumluluk anlamına geliyor.

  • Minimum Java 17 gereksinimi (Java 25 ile en iyi performans)
  • Tomcat 11.x ve Jetty 12 tam destek
  • Undertow henüz desteklenmiyor
  • HTTP/2 tam destek, HTTP/3 (QUIC) için altyapı hazır
  • Modern TLS ve güvenlik iyileştirmeleri
Migration İpucu: javax.servlet.* import’larını jakarta.servlet.* ile değiştirin. Docker image’lerinizi tomcat:11-jdk17 gibi güncel versiyonlara yükseltin. web.xml namespace’ini https://jakarta.ee/xml/ns/jakartaee olarak güncelleyin.

2. Modüler Yapılandırma ve Daha Küçük JAR’lar

En dikkat çeken değişikliklerden biri, devasa spring-boot-autoconfigure JAR’ının kaldırılması ve tamamen modüler bir yapıya geçilmesi.

Artık sadece ihtiyacınız olan starter’ları eklediğinizde ilgili auto-configuration’lar yükleniyor. Bu sayede:

  • Uygulama boyutu küçülüyor
  • Startup süresi hızlanıyor
  • Bellek tüketimi azalıyor
<!-- Eski kullanım (artık gerek yok) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

<!-- Yeni kullanım -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3. Native API Versioning Desteği

Spring Boot 4.0, API versiyonlamasını first-class citizen haline getiriyor. Artık custom filter veya header kontrolü yazmaya gerek yok.

@RestController
@RequestMapping("/process")
@ApiVersion("1")
@Deprecated(since = "2")
class ProcessControllerV1 { ... }

@RestController
@RequestMapping("/process")
@ApiVersion("2")
class ProcessControllerV2 { ... }

Özellikler:

  • Header-based, MediaType-based veya (legacy) URL-based versiyonlama
  • OpenAPI/Swagger’da ayrı contract olarak görünüm
  • Otomatik conflict detection ve fallback
  • Deprecation desteği

4. Resilience Özellikleri Çekirdeğe Taşındı

Resilience4j gibi harici kütüphanelere ihtiyaç duymadan artık doğrudan framework içinde:

  • @Retryable
  • @ConcurrencyLimit
  • @Timeout
  • @Recover (fallback)
@Configuration
@EnableResilientMethods
public class ResilienceConfig {}

@Service
public class RemoteServiceClient {

    @Retryable(maxAttempts = 3, backoff = @Backoff(delay = 500, multiplier = 2))
    @ConcurrencyLimit(5)
    @Timeout(value = 2000)
    public RemoteServiceResponse process(Long id) { ... }
}

Fallback örneği ayrı bir bean üzerinden @Recover ile tanımlanabiliyor. Proxy tabanlı çalıştığı için this çağrılarında çalışmadığını unutmayın.

5. JSpecify ile Derleme Zamanı Null Güvenliği

Spring Boot 4.0, JSpecify standartlarını benimseyerek varsayılan olarak non-null davranış sunuyor.

@org.jspecify.annotations.NullMarked
package com.example.myapp;

// Artık tüm parametre ve return değerleri default non-null
public class UserService {
    public User findById(Long id) { ... } // id null olamaz

    public @Nullable User findByName(String name) { ... }
}

IDE ve compiler seviyesinde null pointer hataları daha kod yazılırken yakalanıyor.

6. Yeni HTTP Service Client: @HttpServiceClient ve @HttpExchange

Spring Boot 4.0 ile gelen en pratik özelliklerden biri, Feign veya WebClient boilerplate’ini ortadan kaldıran yeni HTTP client yaklaşımı.

@HttpServiceClient

@HttpServiceClient(name = "pokemon-api", url = "${pokemon.api.url}")
public interface PokemonClient {

    @GetMapping("/pokemon/{id}")
    Pokemon findById(@PathVariable Integer id);

    @PostMapping("/pokemon")
    Pokemon create(@RequestBody Pokemon pokemon);
}

@HttpExchange (Daha Yeni Alternatif)

@HttpExchange(url = "https://pokeapi.co/api/v2/pokemon", accept = "application/json")
public interface PokemonService {

    @GetExchange("/{id}")
    Pokemon findById(@PathVariable Integer id);

    @GetExchange
    List<Pokemon> findAll();
}

// Uygulama giriş noktasında
@SpringBootApplication
@ImportHttpServices(types = {PokemonService.class})
public class PokemonAppApplication { ... }

Her iki yaklaşım da interface tabanlı, type-safe ve mock/test edilebilir client’lar oluşturmanızı sağlıyor.

Migration İçin Kontrol Listesi

  • Java sürümünü minimum 17’ye yükseltin
  • Tüm javax.* import’larını jakarta.* ile değiştirin
  • Docker base image’leri güncelleyin
  • web.xml namespace’ini düzeltin
  • Eski third-party kütüphaneleri (PDF, Excel, JAX-WS) kontrol edin
  • Integration ve security testlerini tekrar çalıştırın

Sonuç

Spring Boot 4.0, sadece bir versiyon yükseltmesi değil, Java web geliştirme anlayışını yeniden tanımlayan bir dönüm noktası. Daha modüler, daha güvenli, daha performanslı ve geliştirici dostu bir ekosistem sunuyor.

Eğer projenizde Spring Boot 3.x kullanıyorsanız, geçiş planını şimdiden yapmaya başlamanızı öneririm. Özellikle Jakarta EE geçişi ve modüler yapılandırma, uzun vadede büyük kazanımlar sağlayacak.

Siz Spring Boot 4.0’a geçiş yaptınız mı? En çok hangi özelliği beğendiniz? Yorumlarda paylaşmayı unutmayın!

Beğendiysen bir çay ısmarlayabilirsin ☕

Bana çay ısmarla

FrontEnd ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *