SpringFramework5.0是自2013年12月版本4發(fā)布之后SpringFramework的第一個主發(fā)行版。SpringFramework項目的領(lǐng)導(dǎo)人JuergenHoeller于2016年7月28日宣布了第一個SpringFramework5.0里程碑版本(5.0M1)。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比二連浩特網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式二連浩特網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋二連浩特地區(qū)。費用合理售后完善,十年實體公司更值得信賴。現(xiàn)在,將近一年的時間過去以后,我們期盼已久的RC3版本將于2017年7月18日發(fā)行。這是路線圖規(guī)劃中SpringFramework5.0首個GA發(fā)行版的最后一次發(fā)行。
從高層來看,SpringFramework5.0的功能可以分為:
JDK基線更新
核心框架修正
核心容器更新
含Kotlin在內(nèi)的函數(shù)式編程
響應(yīng)式編程模型
測試改進(jìn)
庫支持
中止支持
SpringFramework5.0的JDK基線更新
整個Springframework5.0代碼庫運行于Java8之上。因此SpringFramework5.0對環(huán)境的最低要就就是Java8。
這一點實際上對框架而言非常重要。而作為開發(fā)者的我們而言,則已經(jīng)能夠去藉此來享受到現(xiàn)代Java發(fā)行版中的所有新特性了。而框架版本還背負(fù)這支持已經(jīng)不被建議使用的Java發(fā)行版的任務(wù)。
現(xiàn)在,框架的最低要求是Java8.
SpringFramework5.0原來是計劃在Java9之上發(fā)行的。然后,在基于Java9的發(fā)行版運作了超過18個月之后,Spring團(tuán)隊決定將SpringFramework5.0發(fā)行版同Java9的綁定關(guān)系解除。
不過,在Java9發(fā)布的時候(計劃是2017年9月份),SpringFramework5.0會準(zhǔn)備好的。
核心框架修訂
核心的SpringFramework5.0已經(jīng)利用Java8所引入的新特性進(jìn)行了修訂。比較關(guān)鍵的一些如下:
基于Java8的反射增強(qiáng),SpringFramework5.0中的方法參數(shù)可以更加高效的進(jìn)行訪問。
核心的Spring接口現(xiàn)在提供基于Java8的默認(rèn)方法構(gòu)建的選擇性聲明。
用@Nullable和@NotNull注解來顯示表明可為空的參數(shù)和以及返回值。這樣就夠在編譯的時候處理空值而不是在運行時拋出NullPointerExceptions。
在日志記錄方面,SpringFramework5.0帶來了CommonsLogging橋接模塊的封裝,它被叫做spring-jcl而不是標(biāo)準(zhǔn)的CommonsLogging。當(dāng)然,無需任何額外的橋接,新版本也會對Log4j2.x,SLF4J,JUL(java.util.logging)進(jìn)行自動檢測。
有了Resourse抽象所提供的isFile指示器以及getFile方法,防御式編程方法也得到了框架的推動。
核心容器更新
SpringFramework5.0現(xiàn)在支持候選組件索引作為類路徑掃描的替代方案。該功能已經(jīng)在類路徑掃描器中添加,以簡化添加候選組件標(biāo)識的步驟。
應(yīng)用程序構(gòu)建任務(wù)可以定義當(dāng)前項目自己的META-INF/spring.components文件。在編譯時,源模型是自包含的,JPA實體和Spring組件是已被標(biāo)記的。
從索引讀取實體而不是掃描類路徑對于小于200個類的小型項目是沒有明顯差異。但對大型項目影響較大。加載組件索引開銷更低。因此,隨著類數(shù)的增加,索引讀取的啟動時間將保持不變。
加載組件索引的耗費是廉價的。因此當(dāng)類的數(shù)量不斷增長,加上構(gòu)建索引的啟動時間仍然可以維持一個常數(shù),不過對于組件掃描而言,啟動時間則會有明顯的增長。
這個對于我們處于大型Spring項目的開發(fā)者所意味著的,是應(yīng)用程序的啟動時間將被大大縮減。雖然20或者30秒鐘看似沒什么,但如果每天要這樣登上好幾百次,加起來就夠你受的了。使用了組件索引的話,就能幫助你每天過的更加高效。
你可以在Spring的Jira上了解更多關(guān)于組件索引的相關(guān)信息。
@Nullable注解現(xiàn)在也可以被用來作為可選注入項的指示器。@Nullable為對象使用方規(guī)定了一項義務(wù),就是它們必須準(zhǔn)備以為取值為null的值。在此次發(fā)布之前,實現(xiàn)這件事情的唯一方法就是通過Android的Nullable,CheckerFramework的Nullable,以及JSR305的Nullable。
發(fā)行說明中的其他一些新功能和增強(qiáng)功能包括:
在GenericApplicationContext和AnnotationConfigApplicationContext中實現(xiàn)函數(shù)式編程風(fēng)格。
對接口方法的事務(wù)、緩存和異步注釋的一致性檢測。
將XML配置命名空間簡化為無版本化的模式。
使用Kotlin進(jìn)行函數(shù)式編程
SpringFramework5.0引入了對JetBrainsKotlin語言的支持。Kotlin是一種支持函數(shù)式編程編程風(fēng)格的面向?qū)ο笳Z言。Kotlin運行在JVM之上,但運行環(huán)境并不限于JVM。
有了對Kotlin的支持,開發(fā)者可以進(jìn)行深度的函數(shù)式Spring編程,特別是在函數(shù)式Web端點以及Bean注冊這些方面。
在SpringFramework5.0中,你可以為WEB的函數(shù)式API編寫干凈且地道的Kotlin代碼,就像下面這樣:
{ ("/movie" and accept(TEXT_HTML)).nest { GET("/", movieHandler::findAllView) GET("/{card}", movieHandler::findOneView) } ("/api/movie" and accept(APPLICATION_JSON)).nest { GET("/", movieApiHandler::findAll) GET("/{id}", movieApiHandler::findOne) } }