Spring Boot 4 wurde im 2025 veröffentlicht und baut auf Spring Framework 7. Es ist der Beginn einer neuen Generation – schlanker, typsicherer und produktionsreifer als je zuvor.


Dependency

xml

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.1</version>
</parent>

Mindest-Java-Version: 17. Empfohlen: Java 25.


1. HTTP Service Clients – kein Boilerplate mehr

Früher schrieb man für jeden externen REST-Aufruf manuell RestTemplate– oder WebClient-Code. Jetzt reicht ein annotiertes Interface – Spring generiert die Implementierung automatisch.

java

@HttpExchange(url = "https://dabbaghi.com")
public interface UserClient {
@GetExchange("/users/{id}")
User findById(@PathVariable long id);
@PostExchange("/users")
User create(@RequestBody User user);
}

Spring Boot registriert den Client automatisch als Bean, sobald ein RestClient.Builder oder WebClient.Builder im Kontext vorhanden ist. Kein manuelles Wrapping mehr.


2. API-Versionierung – eingebaut, ohne Aufwand

Versionierung von REST-APIs war bisher Handarbeit. Spring Boot 4 bringt native Unterstützung über application.yaml:

properties

spring:
mvc:
apiversion:
default-version: 1
supported-versions: 1,2

Im Controller genügt eine Annotation:

java

@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
@ApiVersion(1)
public List<User> listV1() { ... }
@GetMapping
@ApiVersion(2)
public Page<User> listV2(Pageable pageable) { ... }
}

Der Client gibt die gewünschte Version per Header (API-Version: 2) oder URL-Prefix (/v2/users) an – je nach Konfiguration.


3. Null-Sicherheit mit JSpecify

NullPointerException zur Laufzeit gehört der Vergangenheit an. Spring Boot 4 setzt auf JSpecify als Standard für Null-Annotationen. Das gesamte Spring-Framework ist damit annotiert.

java

import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
@Service
public class GreetingService {
public @NonNull String greet(@NonNull String name) {
return "Hallo, " + name;
}
public @Nullable User findByEmail(@NonNull String email) {
return userRepository.findByEmail(email).orElse(null);
}
}

Wer eigene Klassen absichern möchte, fügt die Abhängigkeit hinzu:

xml

<dependency>
<groupId>org.jspecify</groupId>
<artifactId>jspecify</artifactId>
<version>1.0.0</version>
</dependency>

4. Modularisierung – kleinere JARs

Das frühere Monolith-JAR spring-boot-autoconfigure ist aufgeteilt. Jedes Modul enthält nur noch die Autokonfiguration, die es wirklich betrifft. Eine Anwendung, die nur JPA und Web nutzt, lädt keine LDAP- oder Neo4j-Konfiguration mehr mit. Das reduziert Speicherbedarf und Startzeit spürbar.

Es sind keine Code-Änderungen nötig – der Effekt tritt automatisch ein.


5. RestTestClient – saubere Integrationstests

Bisher bot Spring Boot MockMvc für Servlet-Tests und WebTestClient für reaktive Tests. Nun gibt es einen einheitlichen RestTestClient, der beide Welten abdeckt:

java

@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
RestTestClient client;
@Test
void shouldReturnUser() {
client.get().uri("/users/1")
.exchange()
.expectStatus().isOk()
.expectBody(User.class)
.value(user -> assertThat(user.id()).isEqualTo(1L));
}
}

Derselbe Testcode funktioniert gegen MockMvc (kein Server) und gegen einen laufenden Server – nur die Annotation ändert sich.

Hinterlasse einen Kommentar

I’m Iman

Mein Name ist Iman Dabbaghi. Ich arbeite als Senior Software Engineer in der Schweiz. Außerdem interessiere ich mich sehr für gewaltfreie Kommunikation, Bachata-Tanz und Musik sowie fürs die Persönlichkeitsentwicklung.

Ich habe einen Masterabschluss in Informatik von der Universität Freiburg in Deutschland, bin Spring/Java Certified Professional (OCP), Certified Professional for Software Architecture (CPSA-F) und ein lebenslanger Lernender 🎓.

EN:

My name is Iman Dabbaghi. I work as a Senior Software Engineer in Switzerland. I am also very interessted in nonviolent communication, Bachata dance and music and also for personal development.

I hold a masters degree in computer science from the university of Freiburg in Germany, am a Spring / Java Certified Professional (OCP), Certified Software Architecture (CPSA-F) and Life Long Learner🎓

Let’s connect