2009-01-26 69 views
19

我打算開始一個新項目,並正在研究當前最先進的Java Web框架。我決定圍繞Guice構建我的應用程序,並且可能會使用像Squill/JEQUEL/JaQu或類似的非常輕量級的ORM,但我無法決定Web框架。哪一個最適合這樣一個輕量級的環境?哪一個最適合Guice?哪個Java Web框架最適合Google Guice?

回答

22

我在這個話題上收集了一些經驗,因爲我在11月開始編寫一個新項目。該項目現在處於後期階段。

對於我來說,下面的設計準則是重要的:

  • 使用現代技術堆棧,既有趣的使用,將在未來的普遍使用。
  • 減少項目工件的數量 - 在有意義的地方使用註釋/ Java代碼,省略XML。
  • 是開源
  • 使用框架有一個活躍的社區
  • 不是α-生育階段
  • 是輕量級
  • 避免的概念重複
  • 我可以解釋它的概念到我的兩個同伴開發人員儘管是優秀的程序員,但從未使用過DI或Web框架。
  • ,可以作爲techological基礎,未來的項目

Google Guice作爲DI容器是一個明顯的選擇 - 顯然是最想好了DI contianer,以卓越的開發和良好的社區。它滿足了上面提到的所有要點。

所以我建立了我的基礎技術堆棧。以Guice開始,爲持久性添加Hibernate(以及warp-persistwarp-servlet)。然後,我寫了一些基本的DAO,選擇一些東西。

然後我試圖做到以下幾點:在上面添加了一個不同的web框架。

我創建了一個表一個簡單的頁面,由DAO,頭和一個文本框填充所有四個框架。

這些是我在比較四種框架時的發現。

XSLT和XStream的是怎樣的一個鐵桿的辦法。這不是一個真正的框架,而是一個針對高性能應用程序的完全無狀態技術。這是服務測試頁面的最快方式。在調試模式下,本地主機上的3   ms與其他框架約30-50   ms。

吉斯一體化是相對平穩,並使用它使我能夠注入到Servlet和注入的HttpRequest,HttpResponse對象,在其它對象的會話經servlet的好,周圍沒有通過他們。缺點:根本沒有社區,因爲我是唯一一個會考慮這個堆棧的人。 - 沒有現成的組件。

然後我看了看JSF和吉斯:這當然有可能把注射器在servlet上下文,並使用吉斯作爲一個服務定位器。使用直接的方法,不可能在其他地方注入輔助bean。使用自定義變量解析器部分地解決了這個問題,但是隨後你在JSF文件中失去了所有IDE集成,再加上你不得不使用難看的FQN作爲你的支持bean,或者在某處建立一個字符串 - > Guice鍵映射。兩者都是醜陋的:

  • 優點:良好的社區,許多開發人員在就業市場(對我來說沒有標準)。如果出現問題,您將不會因爲選擇JSF而被解僱。
  • 缺點:帶來自己的Inversion of control(IoC)機制,它與guice在概念上相沖突。

經部件:我創建了使用這種樂趣簡單的例子;這是早期的阿爾法階段。它很好用,它的組件易於自己實現和重用。它旨在提供與完美Guice集成的類型安全HTML。由於看起來它當時只有一名活躍的開發人員,現在誰正在開發Guice 2.0,我想說社區幾乎不存在。它像魅力一樣工作,速度相當快,但我會成爲阿爾法測試人員。這對我來說是一個商業項目來考慮太危險了。

的Apache Wicket的:這個項目第一次驚訝我檢票IOC和檢票吉斯核心下載撞在了一起。在網頁中構造器注入是不可能的,只有setter +字段。 Wicket網頁中的注射很簡單,只需在要填寫的字段中添加@Inject - 但您不應理解how it works in background。棘手的事情發生。注入網頁在理論上是可行的 - 但我沒有使用它一次,因爲這使得它不可能使用掛載的URL,再加上它會混淆持久化/序列化狀態。 類的注入成員透明地處理網頁序列化,這是啓用瀏覽器後臺支持所必需的。 Wicket使用零外部工件 - 只是應用程序類中的URLs的一點配置。所以所有的配置都是用Java完成的 - 這很適合Guice模型。明確分離HTML和Java。它是開源的,就像大多數質量好的組件一樣。它自2005年(?)開始,是一個頂級Apache項目。雖然它是一個功能豐富的框架,但其合理的緊湊型(所有核心類都適合我的屏幕上的一個JPEG)。與其他人不同,它並沒有帶來自己的IoC機制,而是將IoC視爲可以由Spring Framework,Guice等提供的服務,並且這種理念使得它更加優秀w.r.t. Guice整合。 我提到了真正的智能和簡單的Ajax支持嗎?

框架沒有深入評估:tapestry5 - 帶來了自己的國際奧委會。 Seam:不是一個框架,而是一個通常與Spring,JSF結合的元框架。休眠。 (雖然理論上可以用吉斯替代春天。)

總結:關於評估的框架,Apache Wicket是明確的贏家 - 關於Guice集成+提及的所有其他標準。

除了我們兩個,其他一些人have had this problem before

1

一個好的輕量級web容器是Simple。它非常高效,可以與框架一起使用,如RestletJersey

+0

Guice + DI框架== PITA。澤西競爭/干擾依賴注入,兩者的開發人員從未找出合理的解決方案。有橋樑和kludges和黑客,但澤西島與DI沒有很好的發揮。 – toolbear 2010-04-19 15:49:17

+1

相反,Jersey具有DI的自己的抽象,因此插入DI提供者很容易。 Jersey + Guice對我們非常有用。 – Eelco 2011-08-05 18:57:19

8

Wicket has a Guice module built in,我沒有使用過(但我已經使用Wicket相當多,並喜歡它)。

+1

wicket的問題在於它是一個非託管框架,即您負責實例化組件。我們在引擎蓋下處理這個問題的方式是向組件實例化偵聽器請求注入。它的工作原理 - 但絕對不是* guice的* web框架。 – 2009-02-13 13:29:38