流行的9個Java框架介紹:優(yōu)點、缺點等等
在2018年,Java仍然是世界上***的編程語言。它擁有一個巨大的生態(tài)系統(tǒng),在全世界有超過900萬Java開發(fā)人員。雖然Java不是最直接的語言,但是您不需要從頭編寫Java程序。有許多優(yōu)秀的Java框架可以編寫在Java虛擬機(jī)上運行的web和移動應(yīng)用程序、微服務(wù)和REST api。
Java框架允許您關(guān)注應(yīng)用程序的業(yè)務(wù)邏輯,而不是編寫數(shù)據(jù)庫連接或處理異常等基本功能。此外,如果您有Java方面的經(jīng)驗,您可以快速入門。這些框架都使用相同的語法,使用相似的術(shù)語、范例和概念。
1.Play: Reactive Web and Mobile Framework for Highly Scalable Java Applications

Play框架可以為桌面和移動接口構(gòu)建輕量級的、web友好的Java和Scala應(yīng)用程序。Play是一個非常受歡迎的框架,被領(lǐng)英(LinkedIn)、三星(Samsung)、沃爾瑪(Walmart)、衛(wèi)報(Guardian)、威瑞森(Verizon)等公司使用。
Play經(jīng)常與其他編程語言的強(qiáng)大web框架相比較,比如Ruby的Ruby on Rails框架,Python的Django框架。實際上,Play是一個獨特的Java框架,因為它不依賴于Java EE標(biāo)準(zhǔn)。相反,它打算消除傳統(tǒng)Java web開發(fā)的所有不便,比如開發(fā)周期緩慢和配置過多。它盡可能地類似于腳本語言的web框架(PHP、Python、Ruby等)。
在底層,Play構(gòu)建在Akka工具包之上,該工具包簡化了在Java虛擬機(jī)上創(chuàng)建并發(fā)和分布式應(yīng)用程序。因此,Play使用了一個完全異步的模型,可以帶來更好的可擴(kuò)展性,特別是因為它還遵循無狀態(tài)原則。
Play框架通過提供熱代碼重載、約定優(yōu)于配置以及瀏覽器中的錯誤消息等特性,將開發(fā)人員的工作效率放在首位。此外,它是一個反應(yīng)系統(tǒng),它遵循現(xiàn)代的系統(tǒng)架構(gòu)(響應(yīng)性、彈性、彈性和消息驅(qū)動)來實現(xiàn)更靈活和容錯的結(jié)果。
2.PrimeFaces: UI Framework for Java EE and JavaServer Faces

PrimeFaces是一個流行的web框架,用于為Java EE和JavaServer Faces(見上面)應(yīng)用程序創(chuàng)建輕量級用戶界面。它被許多財富500強(qiáng)公司、政府機(jī)構(gòu)和教育機(jī)構(gòu)使用。
PrimeFaces庫確實是輕量級的。它打包為一個JAR文件,需要零配置,并且沒有任何依賴項。通過提供豐富的組件集(100+)、內(nèi)置的皮膚框架和預(yù)先設(shè)計的主題和布局,它允許您為Java應(yīng)用程序創(chuàng)建用戶界面。由于PrimeFaces構(gòu)建在JavaServer Faces之上,它繼承了一些特性,比如快速應(yīng)用程序開發(fā)。您還可以向任何Java項目添加框架。
在PrimeFaces網(wǎng)站上,你可以找到一個很好的展示所有的早期組件、模板和主題的展示。這些組件帶有相關(guān)的代碼片段,您可以快速地將它們復(fù)制/粘貼到應(yīng)用程序中,或者在必要時對它們進(jìn)行調(diào)整。例如,這里有一個水平的mega菜單,允許您一起顯示根項的子菜單。
PrimeFaces也有一個很棒的主題設(shè)計器,這是一個基于sassbased的主題引擎,有超過500個變量、一個示例主題和字體圖標(biāo)。而且,如果你不想自己構(gòu)建一個主題,你也可以下載一個社區(qū)主題或者購買一個高級的主題畫廊。
3.Spark Framework: Micro Framework for Web Apps and REST APIs

Spark框架是Java和Kotlin編程語言的一個微型框架和領(lǐng)域?qū)S谜Z言。Kotlin也在JVM上運行,它與Java的互操作性是100%的。使用Spark,您可以輕松地開發(fā)web應(yīng)用程序、微服務(wù)和REST api。
微框架最初出現(xiàn)在Ruby和PHP等腳本語言中,由于專注于開發(fā)速度和簡單性,很快獲得了廣泛的關(guān)注。Spark受到Sinatra為Ruby開發(fā)的web應(yīng)用框架的啟發(fā),并于2011年***發(fā)布。它不是MVC框架,但它可以讓你隨心所欲地構(gòu)建你的應(yīng)用程序。與大多數(shù)微框架一樣,它有一個小的代碼庫,需要最少的配置,并且不需要編寫太多的樣板代碼。
事實上,您可以在幾分鐘內(nèi)啟動Spark框架并運行。默認(rèn)情況下,它在嵌入框架的Jetty web服務(wù)器上運行。但是,您也可以在其他Java web服務(wù)器上使用它。根據(jù)Spark自己的調(diào)查,超過50%的用戶使用該框架創(chuàng)建REST api,這可以被視為它***的用例。Spark還支持高通信量的web應(yīng)用程序,每天服務(wù)超過10,000個用戶。
4.Spring Framework: Enterprise-level Java Application Framework

Spring框架可能是最知名的Java框架,擁有巨大的生態(tài)系統(tǒng)和活躍的社區(qū)。它允許您構(gòu)建企業(yè)級Java應(yīng)用程序、web服務(wù)和微服務(wù)。
Spring框架最初是一個依賴注入工具,但是,多年來,它已經(jīng)發(fā)展成為一個全面的應(yīng)用程序框架。它為您提供了一個包含所有內(nèi)容的編程和配置模型,該模型支持通用任務(wù),如建立數(shù)據(jù)庫連接或處理異常。除了Java之外,您還可以與Kotlin和Groovy一起使用這個框架,它們都在Java虛擬機(jī)上運行。
Spring框架利用了控制反轉(zhuǎn)(IoC)軟件設(shè)計原則,根據(jù)該原則,框架控制定制的代碼(而不是傳統(tǒng)的編程,將自定義代碼調(diào)用到處理通用任務(wù)的其他庫中)。因此,您可以為您的Spring應(yīng)用程序創(chuàng)建松散耦合的模塊。
盡管Spring框架非常適合構(gòu)建企業(yè)級Java應(yīng)用程序,但它確實有一條陡峭的學(xué)習(xí)曲線。這是因為它是一個廣泛的框架,它打算為可能出現(xiàn)在企業(yè)級應(yīng)用程序中的每個任務(wù)提供解決方案,并且還支持許多不同的平臺。因此,配置、設(shè)置、構(gòu)建和部署過程都需要多個您可能不希望處理的步驟,尤其是在處理較小的項目時。Spring Boot(與Spring框架不同)是這個問題的解決方案,因為它允許您更快地設(shè)置Spring應(yīng)用程序,配置更少。
5.Struts: MVC Framework for Enterprise-level Java Applications

Struts是由Apache Software Foundation維護(hù)和開發(fā)的全功能Java web應(yīng)用程序框架。與Spring框架相比,它是一個擁有龐大社區(qū)的堅實平臺。Struts允許您創(chuàng)建企業(yè)級Java應(yīng)用程序,隨著時間的推移,這些應(yīng)用程序很容易維護(hù)。
它遵循MVC軟件設(shè)計模式,并且有一個基于插件的體系結(jié)構(gòu)。插件使擴(kuò)展框架以適應(yīng)不同的項目需求成為可能。Struts插件是基本的JAR包。因此,它們是可移植的,您也可以將它們添加到應(yīng)用程序的類路徑中。一些插件與框架綁定(JSON插件、REST插件、配置瀏覽器插件等),而您可以從第三方源添加其他插件。
您可以將Struts與其他Java框架集成在一起,以執(zhí)行不構(gòu)建到平臺中的任務(wù)。例如,可以使用Spring插件進(jìn)行依賴注入,或者使用Hibernate插件進(jìn)行對象關(guān)系映射。Struts還允許您使用不同的客戶端技術(shù)來構(gòu)建應(yīng)用程序的前端,例如javascript頁面或具有角度的HTML。
但是,如果您希望創(chuàng)建可以在前端呈現(xiàn)的服務(wù)器端組件,那么Struts可能不是***的選擇。相反,您應(yīng)該查看具有不同架構(gòu)的框架,如Tapestry或Wicket(請參閱下面的兩個框架)。另外,請注意,由于您仍然需要注意一些關(guān)鍵的安全漏洞,Struts最近受到了負(fù)面影響。
6.Tapestry: Component-oriented Framework for Highly Scalable Apps

Tapestry是一個基于組件的Java框架,可以創(chuàng)建可伸縮的web應(yīng)用程序。它對可重用組件的關(guān)注使它在架構(gòu)上類似于JavaServer Faces和Wicket框架。與Struts一樣,Tapestry也是Apache軟件基金會的一個項目。
可以將Tapestry頁面和組件編寫為普通的舊Java對象(pojo)。因此,您可以從框架訪問整個Java生態(tài)系統(tǒng)。除了Java, Tapestry還支持Groovy和Scala,并與其他Java框架(如Hibernate和Spring)集成。Tapestry已經(jīng)在設(shè)計中考慮到了性能。因此,它為您提供了動態(tài)類重載、異常報告、Ajax支持以及內(nèi)置組件和模板等特性。
Tapestry也是一個開發(fā)人員友好的框架。它內(nèi)置了促進(jìn)測試驅(qū)動開發(fā)(TDD)的實用工具,并支持Selenium測試框架。Tapestry在單個服務(wù)器和服務(wù)器集群上可以很好地伸縮。使用Tapestry構(gòu)建的應(yīng)用程序在瀏覽器中運行得很快,因為它遵循了許多***實踐,比如客戶端緩存、對并發(fā)線程的支持、JavaScript聚合和壓縮、集成GZip內(nèi)容壓縮等等。
7.Vaadin: Web Application Framework With a Focus on UX, Accessibility, and Mobile

Vaadin為您提供了一個簡化Java開發(fā)的平臺。它允許您構(gòu)建以性能、用戶體驗和可訪問性為重點的可定制組件的web應(yīng)用程序。
關(guān)于Vaadin最有趣的事情是它的***版本(就在幾天前,也就是2018年6月)是如此的重要以至于連主要的媒體都報道了它。Vaadin 10以一種全新的方式接近web應(yīng)用程序開發(fā):它使開發(fā)人員能夠直接從Java虛擬機(jī)訪問DOM。在新版本中,Vaadin團(tuán)隊將之前的單片框架分為兩部分。它有一個名為Vaadin Flow的輕量級Java框架,用于處理路由和服務(wù)器-客戶端通信,以及一組在用戶瀏覽器中運行的UI組件。
這些組件是移動優(yōu)先的,遵循***的web和可訪問性標(biāo)準(zhǔn);它們是基于Web組件標(biāo)準(zhǔn)構(gòu)建的。您可以將Vaadin組件與任何前端框架(如React、angle或Vue)一起使用。創(chuàng)建者們還推薦它們作為漸進(jìn)式Web應(yīng)用的構(gòu)建模塊。您可以基于Vaadin組件構(gòu)建您自己的主題,或者使用Vaadin的兩個預(yù)定義主題:Lumo(默認(rèn))和材料。
Vaadin流為您提供了一個高級Java API來管理應(yīng)用程序的所有技術(shù)方面,從通過WebSockets進(jìn)行的服務(wù)器-客戶端自動通信到數(shù)據(jù)綁定。隨著流在JVM上運行,您可以訪問整個Java生態(tài)系統(tǒng)。例如,您可以使用Spring Boot運行應(yīng)用程序。Flow還允許您在Kotlin或Scala中編寫應(yīng)用程序。
8.Vert.x: Polyglot Event-driven Application Framework for the Java Virtual Machine

Vert.x是在Java虛擬機(jī)上運行的一個多語言框架。它允許您用編程語言編寫應(yīng)用程序,如Java、JavaScript、Groovy、Ruby、Scala和Kotlin。它的事件驅(qū)動的體系結(jié)構(gòu)導(dǎo)致應(yīng)用程序能夠很好地伸縮,即使使用最少的硬件資源。
Vert.x是由Eclipse Foundation開發(fā)和維護(hù)的,Eclipse Foundation***的項目是用于Java開發(fā)的Eclipse IDE。而且,誰會比Eclipse的創(chuàng)建者更了解Java呢?綠色的“x”。x是它的多語言性質(zhì),意思是您可以用幾種不同的語言編寫有效的代碼。它為每一種受支持的編程語言提供慣用api。
Vert.x是一個事件驅(qū)動的、非阻塞的框架,它可以使用最少的線程來處理大量的concurrency。綠色。x也是相當(dāng)輕量級的,核心框架僅重約650 kb。它有一個模塊化的架構(gòu),允許你只使用你需要的模塊,這樣你的應(yīng)用程序就可以盡可能的靈活。綠色。如果您想構(gòu)建輕量級、高度可伸縮的微服務(wù),那么x是一個理想的選擇。
9.Wicket: Component-based Web Application Framework for Purists

Wicket是一個基于組件的web應(yīng)用程序框架,類似于JavaServer Faces和Tapestry。它允許您使用純Java和HTML代碼編寫優(yōu)雅、用戶友好的應(yīng)用程序。該框架由Apache Software Foundation維護(hù),就像Struts和Tapestry一樣。
由于Wicket是一個基于組件的框架,所以Wicket應(yīng)用程序由可重用的頁面和組件(如圖像、按鈕、鏈接、表單等)組成。Wicket應(yīng)用程序的編程以pojo為中心,因此組件也是具有封裝和繼承等面向?qū)ο筇匦缘钠胀↗ava對象。組件被打包成可重用的包,因此您可以向它們添加自定義的CSS和JavaScript。
Wicket通過為超過25種語言提供開箱即用的支持,使應(yīng)用程序、頁面和組件國際化。它內(nèi)置的Ajax功能允許您實時更新頁面的某些部分,而不需要編寫任何JavaScript代碼。Wicket也注意安全的URL處理。組件路徑是會話相關(guān)的,url不會顯示任何敏感信息。
結(jié)論
當(dāng)涉及到Java框架時,請保持開放的心態(tài),并進(jìn)行研究,找出最適合您的框架。有很多框架可以適合您的項目,所以使用這個指南來評估您的需求。