成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

重磅!SpringBoot4發布,11項重大變更全解析!

開發 前端
新版本引入了優雅的 API 版本控制支持,允許開發者通過 @RequestMapping 注解中的 version 參數來實現版本控制。

不知道大家最近沒有發現?在我們新創建 Spring Boot 項目的時候,已經有了 Spring Boot 4.0.0 預覽版這個選項了,如下圖所示:

圖片圖片

并且 Spring Boot 4 底層是基于全新的 Spring Framework 7.0.0 實現的,如下圖所示:

圖片圖片

那么問題來了,新版本都有哪些重要的變更呢?接下來由磊哥帶著大家搶先來看。

1.優雅版本控制

新版本引入了優雅的 API 版本控制支持,允許開發者通過 @RequestMapping 注解中的 version 參數來實現版本控制,如下代碼所示:

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實現
        System.out.println("Version 1");
        return"Version 1";
    }

    @RequestMapping(value = "/user", version = "2")
    public String getUserV2() {
        // 版本2實現
        System.out.println("Version 2");
        return"Version 2";
    }
}

程序執行效果:

圖片圖片

2.方便的Bean注入

新版本引入了新的 BeanRegistrar 合約,允許更靈活地注冊 Bean(一次性注入多個 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;
}

寫一個單元測試證明注冊的 Bean 是可以正常使用的:

圖片圖片

3.Null安全改進

新版本采用 JSpecify 注解來聲明 API 的空值安全性,使用 @Nullable 表示可為 Null,使用 @NonNull 表示不能為空,并且會通過 Idea 配合提示警告或錯誤信息,例如以下代碼:

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 版本展現形式不一樣,博主使用的是 Idea 2024,新版本應該才會支持新特性。

4.HTTP代理輕松創建

新版本提供了 @ImportHttpServices 注解,讓你為 HTTP 接口創建代理更加容易,示例代碼如下(它允許您輕松聲明、檢測和配置整個 HTTP 服務組):

@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.其他七個變更

其他升級的特性還包括:

  • SPEL 表達式升級:SPEL 表達式中支持空安全和 Elvis 運算符,例如以下代碼:
@Value("#{systemProperties['pop3.port'] ?: 25}")

它表示,將注入系統屬性 pop3.port 的值,如果未定義該屬性值,注入 25 這個值。

  • GraalVM 原生應用支持:借助 Spring AOT 技術,將應用編譯成原生鏡像,極大地縮短了啟動時間。
  • 支持 Jackson 3.x:放棄對 Jackson 2.x 的支持,升級為 Jackson 3.x。
  • Servlet 和 WebSocket 版本升級:使用 Servlet 6.1 和 WebSocket 2.2 作為 Web 應用程序的底層實現,這意味著應用程序應該部署在最新的 Servlet 容器上,比如 Tomcat 11+ 和 Jetty 12.1+。
  • HttpHeaders 優化: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");
    }
}
  • 功能刪除:新版本中的刪除的內容如下:

Spring MVC 的 XML 配置名稱空間現在被棄用,取而代之的是 Java 配置體。

Spring TestContext 框架中的 JUnit 4 支持現在已經被棄用。

Jackson 2.x 支持已被棄用,取而代之的是 Jackson 3.x。

Spring JCL 停用。

  • 最低環境要求提高

       Jakarta EE 11 (Tomcat 11+)

      Kotlin 2.x

       JSONassert 2.0

       GraalVM 23

更多升級信息參考官網:https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-7.0-Release-Notes

小結

程序員是干到老學到老的行業,框架和工具的變更意味著我們會有更便利、更友好的調用方式,所以對于程序員是利好的,因此一起學起來、用起來、折騰起來吧。

責任編輯:武曉燕 來源: 磊哥學Java
相關推薦

2015-11-11 16:23:28

Threshold 2更新Windows 10

2023-03-02 13:41:39

搜素Windows

2011-10-11 16:11:26

FreeBSD 9.0

2022-01-21 09:18:49

Wine 7.0LinuxWindows

2011-07-19 18:17:38

Xcode Xcode4 App

2024-04-22 09:02:42

2015-10-23 10:02:29

更新Windows 10微軟

2009-06-21 13:37:53

2011-11-02 17:08:48

OpenBSD發布

2009-09-27 13:41:55

Eclipse 3.5

2009-02-25 09:35:12

LinuxBASH 4.0OS X v10.4

2012-03-15 16:46:02

JavaMyBatis

2011-06-07 10:07:06

LibreOffice

2011-08-02 09:15:49

LibreOffice

2011-02-24 09:36:33

LibreOffice

2011-12-21 08:58:23

Java

2012-11-14 09:31:13

CloudStackIaaSCitrix

2012-03-15 09:57:59

JavaDynamicRepo

2010-04-09 09:14:44

Windows新版發布

2011-03-23 10:02:24

Opera Mini Opera Mobil
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天夜夜人人 | 色播视频在线观看 | 中文字幕日韩欧美 | 欧美国产精品一区二区三区 | 一级片aaa| 亚洲一区不卡在线 | 日本在线看| 亚洲欧美日韩国产综合 | 五月婷婷激情 | 亚洲人精品午夜 | 国产日韩精品视频 | 第四色狠狠 | 一区二区三区免费看 | 一区二区电影网 | 爱高潮www亚洲精品 中文字幕免费视频 | 国产福利91精品一区二区三区 | 欧美群妇大交群中文字幕 | 色婷婷亚洲一区二区三区 | 天天天操天天天干 | 久久免费高清视频 | 久久久久亚洲精品 | 永久精品 | 懂色av一区二区三区在线播放 | 精品久久影院 | av黄色免费在线观看 | 欧区一欧区二欧区三免费 | 污书屋 | 国产成人精品一区二区三区四区 | 日韩视频观看 | 国产一区二区三区在线看 | 91在线色视频 | 国产成人一区 | 久久久久久国产精品免费免费男同 | 奇米四色在线观看 | 日韩精品视频在线观看一区二区三区 | 在线观看av网站 | 日韩毛片在线观看 | 99re在线视频 | 亚洲播放一区 | 成人免费在线视频 | 欧美在线视频网站 |