SpringBoot4發(fā)布!新特性解析
不知道大家最近發(fā)現(xiàn)沒(méi)有?在我們新創(chuàng)建 Spring Boot 項(xiàng)目的時(shí)候,已經(jīng)有了 Spring Boot 4.0.0 預(yù)覽版這個(gè)選項(xiàng)了,如下圖所示:

并且 Spring Boot 4 底層是基于全新的 Spring Framework 7.0.0 實(shí)現(xiàn)的,如下圖所示:

那么問(wèn)題來(lái)了,新版本都有哪些重要的變更呢?接下來(lái)由磊哥帶著大家搶先來(lái)看。
1.優(yōu)雅版本控制
新版本引入了優(yōu)雅的 API 版本控制支持,允許開(kāi)發(fā)者通過(guò) @RequestMapping 注解中的 version 參數(shù)來(lái)實(shí)現(xiàn)版本控制,如下代碼所示:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
publicclass VersionedController {
@RequestMapping(value = "/user", version = "1")
public String getUserV1() {
// 版本1實(shí)現(xiàn)
System.out.println("Version 1");
return"Version 1";
}
@RequestMapping(value = "/user", version = "2")
public String getUserV2() {
// 版本2實(shí)現(xiàn)
System.out.println("Version 2");
return"Version 2";
}
}程序執(zhí)行效果:

2.方便的Bean注入
新版本引入了新的 BeanRegistrar 合約,允許更靈活地注冊(cè) Bean(一次性注入多個(gè) Bean),示例代碼如下:
import org.springframework.beans.factory.BeanRegistrar;
import org.springframework.beans.factory.BeanRegistry;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
@Configuration
@Import(MyBeansRegistrar.class)
public class MyConfiguration {
}
class MyBeansRegistrar implements BeanRegistrar {
@Override
public void register(BeanRegistry registry,
Environment env) {
registry.registerBean("user", User.class);
if (env.matchesProfiles("dev")) {
registry.registerBean(Order.class, spec -> spec
.supplier(context -> new Order("order_001")));
}
}
}
class User {
private String name;
}
class Order {
public Order(String name) {
this.name = name;
}
private String name;
}寫(xiě)一個(gè)單元測(cè)試證明注冊(cè)的 Bean 是可以正常使用的:

3.Null安全改進(jìn)
新版本采用 JSpecify 注解來(lái)聲明 API 的空值安全性,使用 @Nullable 表示可為 Null,使用 @NonNull 表示不能為空,并且會(huì)通過(guò) Idea 配合提示警告或錯(cuò)誤信息,例如以下代碼:
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
publicclass Person {
private String name;
public void setName(@NonNull String name) {
this.name = name;
}
@Nullable
public String getName() {
returnthis.name;
}
}在 Idea 中也能看到警告信息:

不同 Idea 版本展現(xiàn)形式不一樣,博主使用的是 Idea 2024,新版本應(yīng)該才會(huì)支持新特性。
4.HTTP代理輕松創(chuàng)建
新版本提供了 @ImportHttpServices 注解,讓你為 HTTP 接口創(chuàng)建代理更加容易,示例代碼如下(它允許您輕松聲明、檢測(cè)和配置整個(gè) HTTP 服務(wù)組):
@Configuration(proxyBeanMethods = false)
@ImportHttpServices(group = "weather", types = {FreeWeather.class, CommercialWeather.class})
@ImportHttpServices(group = "user", types = {UserServiceInternal.class, UserServiceOfficial.class})
static class HttpServicesConfiguration extends AbstractHttpServiceRegistrar {
@Bean
public RestClientHttpServiceGroupConfigurer groupConfigurer() {
return groups -> groups.filterByName("weather", "user")
.configureClient((group, builder) -> builder.defaultHeader("User-Agent", "My-Application"));
}
}5.其他七個(gè)變更
其他升級(jí)的特性還包括:
SPEL 表達(dá)式升級(jí):SPEL 表達(dá)式中支持空安全和 Elvis 運(yùn)算符,例如以下代碼:
@Value("#{systemProperties['pop3.port'] ?: 25}")它表示,將注入系統(tǒng)屬性 pop3.port 的值,如果未定義該屬性值,注入 25 這個(gè)值。
GraalVM 原生應(yīng)用支持:借助 Spring AOT 技術(shù),將應(yīng)用編譯成原生鏡像,極大地縮短了啟動(dòng)時(shí)間。
支持 Jackson 3.x:放棄對(duì) Jackson 2.x 的支持,升級(jí)為 Jackson 3.x。
Servlet 和 WebSocket 版本升級(jí):使用 Servlet 6.1 和 WebSocket 2.2 作為 Web 應(yīng)用程序的底層實(shí)現(xiàn),這意味著應(yīng)用程序應(yīng)該部署在最新的 Servlet 容器上,比如 Tomcat 11+ 和 Jetty 12.1+。
HttpHeaders 優(yōu)化:HttpHeaders 操作如下:
@RestController
publicclass MyController {
@GetMapping("/headers")
public ResponseEntity<String> handleRequest(HttpHeaders headers) {
// 舊方式(已廢棄)
// headers.getFirst("X-Custom-Header");
// 新方式
String value = headers.firstValue("X-Custom-Header").orElse(null);
// 遍歷所有頭部
headers.forEach((name, values) -> {
System.out.println(name + ": " + values);
});
return ResponseEntity.ok("Processed");
}
}功能刪除:新版本中的刪除的內(nèi)容如下:
- Spring MVC 的 XML 配置名稱空間現(xiàn)在被棄用,取而代之的是 Java 配置體。
- Spring TestContext 框架中的 JUnit 4 支持現(xiàn)在已經(jīng)被棄用。
- Jackson 2.x 支持已被棄用,取而代之的是 Jackson 3.x。
- Spring JCL 停用。
最低環(huán)境要求提高:
- Jakarta EE 11 (Tomcat 11+)
- Kotlin 2.x
- JSONassert 2.0
- GraalVM 23
更多升級(jí)信息參考官網(wǎng):https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-7.0-Release-Notes
小結(jié)
程序員是干到老學(xué)到老的行業(yè),框架和工具的變更意味著我們會(huì)有更便利、更友好的調(diào)用方式,所以對(duì)于程序員是利好的,因此一起學(xué)起來(lái)、用起來(lái)、折騰起來(lái)吧。



















