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

Spring Framework 6正式發布,攜JDK 17&Jakarta EE開啟新篇章

開發 架構
Spring Framework作為Java領域最為流行的框架(沒有之一),有非常龐大的用戶群體、項目歷史。這些歷史現在看來即是它的優勢,有時也會成為較重的包袱。

你好,我是YourBatman:一個俗人,貪財好色。

Title

Link

所屬專欄

??[YourBatman]-資訊/新特性???,??[YourBatman]-Spring技術棧新特性??

源代碼

??https://github.com/yourbatman/FXP-java-ee??

程序員專用網盤公益上線啦,注冊送1G超小容量,幫你實踐做減法

??https://wangpan.yourbatman.cn??

Java開發軟件包(Mac)

https://wangpan.yourbatman.cn/s/rEH0 提取碼:javakit

女媧工程

??http://152.136.106.14:8761??

版本約定

[Mac OS 13.0.1],[IDEA 2022.2.4]

前言

在云原生發展勢頭下,Spring被冠以太重的標簽,被新興框架Quarkus、Micronaut等嘲笑“廉頗老矣”。可親是否可知,最初Spring就是以輕量級出圈(interface 21就是佐證),橫掃Java EE。

筆者在年初的文章早有“預告”,Spring團隊2022年會有大動作。從年初到年底,可謂千呼萬喚始出來:Sprng Framework 6終于GA(同時期的還有Spring Boot和Spring Cloud在前后腳都會發布RELEASE版本)。

Sprng Framework 5于2017年9月份發布,距今已有5年多了。作為Spring技術棧的底座:本次Spring Framework大版本號升級是阻斷式的,不向下兼容。

值得注意的是,本文并不嘗試解釋Spring Framework為何一躍將JDK的baseline從JDK 8提到JDK 17,以及廢棄javax啟用全新的jakarta命名空間,那是另一個系列的話題了。本文僅嘗試介紹新特性。

what’s new(新特性)

老規矩,將我們關心的功能爽一遍。

最低要求JDK 17

Spring Framework 6基于JDK 17構建。換句話講,若想使用Spring Framework 6那么你的JDK環境最低要求JDK 17。市占率方面目前JDK 8其實已跌落至第二,曾經的“你發任你發,我用Java 8”終將成為歷史,這不Spring這次就來引領潮流。

問:同為LTS版本的JDK,Spring團隊為何沒選擇受眾更多的JDK 11而一躍選擇了更高版本的JDK 17呢?不怕栽跟頭嗎?

現在我創建一個Spring Framework 6的項目(基于maven構建):

圖片

點確定后,加入依賴:

圖片

啟動Spring容器的代碼:

/**
* 在此處添加備注信息
*
* @author YourBatman
* @since 0.0.1
*/
@ComponentScan
public class Application {

public static void main(String[] args){
ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
System.out.println(context.getBean(DemoConfiguration.class));
}

}

成功運行程序!

當然若你不信邪,執意用JDK 8運行這段程序,那么你得到的將是這個:

圖片

從Java EE邁向Jakarta EE

javax命名空間其實早已成為過去式,畢竟現在已快2023年了。這次Spring團隊也是跟著JDK一起,順勢的完全摒棄掉了javax命名空間,擁抱Jakarta EE。

Jakarta EE估摸不少讀者可能沒聽過,沒關系!關于Java EE和Jakarta EE的“恩怨情仇(歷史淵源)”,感興趣的一定要看看筆者的這個系列:[YourBatman]-Java EE,給你說得門清。

從Jakarta EE 9開始,便使用了全新的jakarta.*命名空間。本次建議使用從Jakarta EE 10起步。對應的技術主要有:

  • Jakarta Servlet 6.0
  • Jakarta Servlet JSP JSTL 3.0
  • Jakarta Validation 3.0
  • Jakarta WebSocket 2.1
  • Jakarta Persistence 3.1
  • Jakarta JMS 3.1
  • Jakarta JSON 2.1
  • Jakarta JSON Bind 3.0
  • Jakarta Activation 2.1
  • Jakarta Mail 2.1
  • Jakarta Transaction 2.0
  • Jakarta WS RS 3.1
  • Jakarta XML SOAP 3.0
  • Jakarta XML WS 4.0

另外,之前有些內置進JDK里面的Java EE注解,現在也換“包名”啦,如具有代表性的:JSR-330的@Inject、JSR 250的@PostConstruct、@Predestroy以及及其常用的@Resource注解。

圖片

圖片

LocalVariableTableParameterNameDiscoverer標記為過時

LocalVariableTableParameterNameDiscoverer是ParameterNameDiscoverer的一個實現類,用于找出參數名。它是Spring的一個經典實現,早在Spring Framework 2.0就已出現。我們知道java代碼編譯后,默認情況下參數名是不會保留的,而它利用了LocalVariableTable + ASM字節碼技術實現了參數名的查找。

直到Spring Framework 4.0(此版本開始支持JDK 8),才出現了它的替代者:StandardReflectionParameterNameDiscoverer,基于JDK 8標準的參數化實現的。

JDK支持編譯時加上"-parameters參數,便可保留方法參數的名字

一直以來,Spring Framework為了考慮兼容性只能降低LocalVariableTableParameterNameDiscoverer的優先級但并“不敢”打干掉它的注意。這次顯然不一樣勒,已經標記為過時了:

圖片

按照Spring OSS標準,標記為過時的類,在下個中型版本將會被移除。為此,Spring為了防止“亂用”,如若在運行過程中發現你使用到了此類,會收到如下warn警告:

Using deprecated '-debug' fallback for parameter name resolution. Compile the 
affected code with '-parameters' instead or avoid its introspection:

這是一個優秀框架該有的樣子:完成了太多的非功能性需求,可謂想犯錯都難。

ListenableFuture被標記為過時

JDK最初有Futrue,而后Spring搞了一個增強版的ListenableFuture。直到Java 8的出現:有了CompletableFuture再也不用使用ListenableFuture了。這不,這次順勢就把它拿下了。

圖片

除了ListenableFuture本身,與其相關的類都已被標記為過時,如:ListenableFutureCallback、SuccessCallback、FailureCallback等。

移除調CommonsMultipart等類

一直以來spring-web支持兩種上傳文件方式:

基于Apache Commons Fileuplod庫的CommonsMultipartResolver的解決方案

基于標準Servlet規范的StandardServletMultipartResolver解決方案

對應的就是MultipartResolver接口的兩個實現類,如下圖所示(6之前的版本有兩個實現):

圖片

從本版本(Spring Framework 6)起,基于Apache Commons實現方案正式退出歷史舞臺,相關類也已從源代碼里刪除。自此MultipartResolver有且僅有唯一實現:

圖片

值得一提的是:起初Spring框架上傳文件推薦選擇的是基于Apache Commons庫的方案(也就是CommonsMultipartResolver),因為那會基于Servlet的方案性能有較大問題;但隨著Servlet的更新(從Servlet 3.0開始,javax.servlet.http.Part技術出現就不再有性能問題了),問題得到解決。

HttpMethod不再是枚舉,改為了類

HttpMethod是web開發中比較常見的一個類,本次從enum -> class類型的變更絕大部分情況下都能兼容,只在某些特殊case下注意一下即可(比如不能再使用switch而需改為if else來做分支邏輯了)。

PS:HttpMethod改為類后重寫了hashcode和equals方法,因此等值==比較也是不會有問題的,請放心食用

Spring Framework 5.x版本:

圖片

Spring Framework 6版本:

圖片

RestTemplate最低要求HttpClient 5.x

RestTemplate是spring-web對http請求的抽象,它底層的實現技術可以是Apache HttpClient、OkHttp、JDK實現等等,具體采用什么技術是由ClientHttpRequestFactory的實現類決定的。

本次Spring Framework 6針對Apache的實現,徹底摒棄Apache HttpClient 4.x,擁抱Apache HttpClient 5。

圖片

雖然底層實現有所變更,但若你代碼里是面向Spring的RestTemplate進行編程的,那就可做到無感知。

僅標注@RequestMapping注解不再被掃描為Controller了

喜大普奔!喜大普奔!喜大普奔!重說三,懂的都懂。

在之前的Spring Framework版本中,spring-web會將標注有@Controller注解或者標注有@RequestMapping注解的掃描為一個控制器(controller):

圖片

這個動作看似合理方便了使用,但這在Spring Cloud場景下非常“煩人”:@FeignClient + API Jar包是現行微服務通信的典型使用方式。

在Spring Boot大一統的包掃描背景下,多數團隊@EnableFeignClients也采用大一統的掃描策略,然而這就是“災難”的開始:非常容易得就將一個@FeignClient接口掃描為一個controller從而對外暴露了其所有接口,除了大大拖慢啟動速度、造成URL沖突之外,進而產生了重大安全隱患。

PS:雖然一般的公司在腳手架層面會默默的解決掉這個問題,但據我了解絕大多數團隊其實并未關注過此問題,比如筆者寫過的:

圖片

這下好了,Spring Framework 6幫我們解決了這個煩惱,這是它的判斷邏輯:控制器只認@Controller注解了。

圖片

這讓我想起來有些同學使用@Bean去聲明一個控制器,現在是不行了(之前可以大概率是因為類上有@RequestMapping注解而誤打誤撞了),需要引起重視。

GenericApplicationContext支持AOT

支持AOT是Spring擁抱Native、擁抱云原生的基礎,當然這也是為何必須基于至少JDK 17構建的原因之一。

對GraalVM native images提供一流的支持

GraalVM嘛,等下篇文章聊Spring Boot 3.0.0時再談。

PathMatchingResourcePatternResolver使用NIO和module方式掃描加速

Spring的scan一直是導致容器啟動慢的重要愿意之一,甚至沒有之一。Spring Framework 6版本對此做了很大的優化。

其實,早在Spring Framework 5就采用了index方式進行scan優化,效果還是比較顯著的。但是此方式并不夠100%通用且使用起來不太方便,因此沒擊起什么浪花(默認情況下并不會啟用)。這次不一樣了:將可選項變為了必選項,更是唯一選項。

在此之前PathMatchingResourcePatternResolver只能通過掃xxx路徑下的所有文件(同步阻塞IO)來發現Bean。多module是JDK瘦身的一種方式,這次就利用多模塊 + GraalVM雙重優勢,來大大加快掃描的速度,核心代碼在這里:

圖片

強依賴micrometer的可觀測性

在Spring Framework 6的幾個(不是全部)子項目中使用micrometer進行了直接的觀測性。比如:spring-web模塊現在就強依賴包io.micrometer:micrometer-observation來完成(編譯)工作:

圖片

micrometer之前只被用在Spring Boot中,現在Spring Framework部分子項目也接入了,這樣觀察將會更直接、更全面,這就是生態整合能力了吧。

總結

Spring Framework作為Java領域最為流行的框架(沒有之一),有非常龐大的用戶群體、項目歷史。這些歷史現在看來即是它的優勢,有時也會成為較重的包袱。

Spring團隊自然能感知到“危機”,故有了Spring Native項目回應“尚能飯否”。這次Spring Framework 6直接以JDK 17起底,并且對GraalVM native images提供一流支持,目的非常明確:(適當的)甩掉包袱,證明我還行。

最后分享一句話:上山的人永遠不要嘲笑下山的神。況且Spring依舊如日中天~

責任編輯:武曉燕 來源: YourBatman
相關推薦

2010-08-24 10:07:48

IMOS Inside安防監控H3C

2018-03-28 17:23:00

VMware云計算

2010-09-28 16:16:43

2021-07-13 17:11:55

系統安全IT

2016-03-07 20:21:33

華為

2021-11-19 11:25:45

網絡安全

2013-04-03 17:40:44

伊頓

2013-09-16 17:33:26

華為遠程銀行華為VTM華為

2016-11-30 10:19:30

潤乾蔣步星科技情懷

2016-11-30 13:36:00

潤乾蔣步星服務器

2013-01-18 08:54:44

IBM智慧城市

2013-05-22 15:17:04

Windows Azu微軟公有云
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品在线播放 | 免费的av| 亚洲精品白浆高清久久久久久 | 一区二区视频在线 | 久久91 | 精品国产一区二区三区四区在线 | va精品| 午夜91| 欧美爱爱视频 | 天天精品在线 | 亚洲天堂网站 | 国产精品69毛片高清亚洲 | 高清免费在线 | 成人精品一区二区三区 | 日韩精品久久 | 国产精品久久九九 | 精品久久精品 | 成年人黄色一级毛片 | 国产一区二区欧美 | 91在线视频观看 | 中文在线一区二区 | 在线观看av中文字幕 | 国产精品我不卡 | 狠狠插天天干 | 成人av一区二区三区 | 天天草天天干天天 | 欧美日韩成人一区二区 | 国产乱码精品一区二区三区忘忧草 | 99精品免费在线观看 | 国产精品一区二区三区免费观看 | 欧美h| 中文字幕在线看人 | 久久久久国产一区二区三区 | 中文字幕国产在线 | 一区二区三区视频 | 三级av网址 | 国产一区二区三区在线免费观看 | 国产四区| 日韩在线小视频 | 男人天堂国产 | 欧美一区二区三区在线观看 |