<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Fork me on GitHub

      重磅!SpringBoot4發(fā)布,11項(xiàng)重大變更全解析!

      不知道大家最近沒(méi)有發(fā)現(xiàn)?在我們新創(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")
      public class 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;
      
      public class Person {
          private String name;
      
          public void setName(@NonNull String name) {
              this.name = name;
          }
      
          @Nullable
          public String getName() {
              return this.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í)的特性還包括:

      1. SPEL 表達(dá)式升級(jí)SPEL 表達(dá)式中支持空安全和 Elvis 運(yùn)算符,例如以下代碼:

        @Value("#{systemProperties['pop3.port'] ?: 25}")
        

        它表示,將注入系統(tǒng)屬性 pop3.port 的值,如果未定義該屬性值,注入 25 這個(gè)值。

      2. GraalVM 原生應(yīng)用支持:借助 Spring AOT 技術(shù),將應(yīng)用編譯成原生鏡像,極大地縮短了啟動(dòng)時(shí)間。

      3. 支持 Jackson 3.x:放棄對(duì) Jackson 2.x 的支持,升級(jí)為 Jackson 3.x。

      4. 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+。

      5. HttpHeaders 優(yōu)化:HttpHeaders 操作如下:

        @RestController
        public class 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");
            }
        }
        
      6. 功能刪除:新版本中的刪除的內(nèi)容如下:

        • Spring MVC 的 XML 配置名稱空間現(xiàn)在被棄用,取而代之的是 Java 配置體。
        • Spring TestContext 框架中的 JUnit 4 支持現(xiàn)在已經(jīng)被棄用。
        • Jackson 2.x 支持已被棄用,取而代之的是 Jackson 3.x。
        • Spring JCL 停用。
      7. 最低環(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)吧。

      本文已收錄到我的技術(shù)小站 www.javacn.site,其中包含的內(nèi)容有:Spring Boot、Spring Cloud、Spring AI、LangChain4j、Dify、AI Agent、MCP、Function Call、RAG、向量數(shù)據(jù)庫(kù)、Prompt、多模態(tài)、向量數(shù)據(jù)庫(kù)、嵌入模型等內(nèi)容。

      posted @ 2025-05-28 15:52  磊哥|www.javacn.site  閱讀(4261)  評(píng)論(3)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产初高中生粉嫩无套第一次| 永久天堂网 av手机版| 国产精品中文字幕日韩| 欧美人与zoxxxx另类| 亚洲日韩久久综合中文字幕| 亚洲av无码成人精品区一区| 精品一区二区三区少妇蜜臀| 不卡国产一区二区三区| 久久精品av国产一区二区| 亚洲第一福利网站在线观看| 青青青久热国产精品视频| 免费黄色大全一区二区三区| 麻豆a级片| 亚洲国产精品黄在线观看| 综合激情丁香久久狠狠| 视频一区视频二区制服丝袜| 久久se精品一区二区三区| 宅男噜噜噜66网站高清| 东光县| 国产日韩av免费无码一区二区三区| 免费A级毛片樱桃视频| 中国女人大白屁股ass| 国产AV巨作丝袜秘书| 亚洲精品成人久久久| 精品日韩人妻中文字幕| 色8久久人人97超碰香蕉987| 一区二区三区四区在线不卡高清| 国产极品美女高潮无套| 亚洲一区二区国产av| 成人特黄特色毛片免费看| 国产av成人精品播放| 国内揄拍国内精品人妻久久| av色蜜桃一区二区三区| 国产亚洲欧洲AⅤ综合一区| 亚洲熟女一区二区av| 色综合久久久久综合体桃花网| 国产精品亚洲аv无码播放| 自拍偷自拍亚洲一区二区| a国产一区二区免费入口| 午夜免费视频国产在线| 国产三级精品三级在线看|