偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SpringBoot4發(fā)布!新特性解析

開(kāi)發(fā) 前端
新版本采用 JSpecify 注解來(lái)聲明 API 的空值安全性,使用 @Nullable 表示可為 Null,使用 @NonNull 表示不能為空,并且會(huì)通過(guò) Idea 配合提示警告或錯(cuò)誤信息。

不知道大家最近發(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)吧。

責(zé)任編輯:武曉燕 來(lái)源: java和磊哥
相關(guān)推薦

2025-05-29 01:44:00

2019-03-05 10:27:53

Linux 系統(tǒng) 數(shù)據(jù)

2013-02-26 09:36:57

RubyRuby 2.0

2009-06-16 11:25:57

phpMyAdmin

2012-08-13 10:40:37

Ubuntu Twea操作系統(tǒng)

2011-10-14 06:58:30

Ubuntu 11.1特性

2014-09-12 10:46:35

Java9

2022-01-27 08:58:13

Python新版本特性

2011-10-19 08:52:59

Android 4.0新特性

2010-11-11 09:40:26

RHEL 6紅帽企業(yè)級(jí)Linux

2009-09-27 13:41:55

Eclipse 3.5

2011-11-02 17:08:48

OpenBSD發(fā)布

2009-06-21 13:37:53

2012-03-15 16:46:02

JavaMyBatis

2009-02-25 09:35:12

LinuxBASH 4.0OS X v10.4

2011-07-19 18:17:38

Xcode Xcode4 App

2011-12-01 14:40:18

JUnitJava

2012-06-13 01:47:42

EclipseEquinox

2009-07-28 17:48:13

OSGi 4.2

2009-07-01 09:32:11

PHP 5.3.0
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)