天天看點

JavaSE、JavaEE 與Spring的概念

JavaSE、JavaEE 與Spring的概念

在Java世界中,很多人都對Java SE、J2EE、Java EE、Spring、EJB等這些術語感到困惑。

什麼是Java SE

  • 可以說這是Java的核心。(主要部分)
  • 用于開發桌面應用程式和基于web的應用程式。
  • 它提供了從基本對象到進階類的所有東西,這些類被用于網絡、資料庫通路、安全、XML解析、GUI開發。
  • 除了這些核心api之外,它還提供了虛拟機(JVM)、開發工具、部署技術等
JavaSE、JavaEE 與Spring的概念

什麼是Java EE

  • Java EE是一個抽象的規範。
  • 具體實作稱為應用伺服器(如GlassFish、WildFly、WebLogic)。
  • 當您從Oracle站點下載下傳Java EE時,它将給您提供大量文檔和示例的GlassFish伺服器。是以,它們隻是提供了Java Enterprise Edition規範的實作。
  • 您還可以使用其他的實作,比如RedHat WildFly,它也遵循這些規範。

    是以,J2EE是1999年到2003年Java EE的抽象規範的版本名稱。

  • EJB遵循Java EE規範,是以EJB屬于JavaEE。
JavaSE、JavaEE 與Spring的概念

什麼是Spring

  • Spring遵循“所有”JavaEE規範嗎? 嚴格地說不是
  • Spring是一個獨立的架構,它替代并改進了JavaEE的許多部分。
  • 您可以将Spring視為一個內建平台,允許您使用所有JavaEE技術。
  • 這意味着您不一定需要完整的fledge JavaEE應用伺服器來支援。

    您可以在像Tomcat這樣的簡單servlet容器上運作它。

  • Spring是一個獨立的內建平台(架構),在JavaEE中有改進和替換,也允許您使用JavaEE技術。
JavaSE、JavaEE 與Spring的概念

JavaEE 與Spring的差別

Rod Johnson帶着他的革命書籍,《J2EE Development without EJB》,描述了新的Spring架構的特性。它就像一股新鮮空氣,很快,Spring的直覺依賴注入功能成為了控制反轉(IoC)設計模式的實際标準實作。

從那時起,JEE和Spring都在發展,盡管Spring似乎總是在前進。Spring引入的所有最佳功能後來都被“标準”企業Java采納,包括:

  • Spring IoC在JEE中實作為容器依賴注入(CDI);
  • JEE作為JSR 352實作的Spring批處理:Java平台的批處理應用程式。

公平地說,在Java中很酷的新功能,比如注解,也會導緻對Spring的修改。除了在第三次疊代中提供基于注解的配置之外,Spring也變得子產品化,至少在一定程度上歸功于Maven的巨大流行,它引入了一種解決和管理依賴第三方庫的新方法。事實上,JEE和Spring繼續互相影響并互相鼓勵,比如當JEE 7引入了Web profile的子產品化,開發了JAX的開發人員,并促進了更輕量級的企業應用程式。類似地,從Java 8的JCP 335和JCP 310的日期和時間API,在Spring中激發了新的增強。可無論是JEE還是Spring的支援者都傾向于認為它們是互相排斥的。

讓我們來看看在一個更平衡的環境中進行比較

Java EE:

  • Java EE行業認可的标準API架構
  • 它主要基于注釋和CDI
  • 用于web開發的JFC MVC架構
  • 用于程序資料庫操作的JPA實作
  • JTA API和實作
  • 基于EJB容器和POJO的實作
  • Oracle許可證

Spring:

  • 基于IOC和AOP
  • 基于XML配置(現在他們正在利用注釋)
  • 使用Spring DAO架構(基于模闆設計patter)連接配接到資料庫
  • 提供抽象層以支援各種JTA實作供應商
  • 與不同的Java廠商的不同支援不同的功能,這樣容易與struts等內建
  • 提供端到端平台建構web應用程式,實作使用DI和AOP的松散耦合
  • 開放源碼許可

Spring的實作重點與JEE的标準化和可移植性

  • SpringSource社群與Java社群過程的主要差別在于其不同的動機。SpringSource的創新來自于解決現實世界問題的需要。解決方案以解決問題為導向,這樣下一個步驟和整個項目就可以盡可能快速和順利地實作。
  • JCP有點像公司。創新和決策與解決方案如何導緻标準技術規範相關聯。另外,像Oracle、IBM、RedHat甚至SpringSource參與JCP。大多數Java規範請求都需要很長的路徑才能實際實作。例如,jsr - 303:Bean驗證需要三年才能完成。也許在這個領域,速度并沒有那麼重要,因為大多數大型企業項目不會經常發生變化,而且會有更長的生命周期。他們甚至可能不想要所有最新的、但未經證明的技術。
  • JEE的另一個論點是可移植性。簡而言之,JEE是一組規範。你在你的應用程式中使用的東西可以被拉入你選擇的任何JEE相容的容器中。簡單地說,用一些正常的方法來包裝業務邏輯,為CRUD操作提供持久性,然後從14個JEE供應商中選擇。理想情況下,您應該能夠在不同伺服器之間移動代碼。這有時行得通。首先,現在隻有三個供應商支援JEE 7,是以很多都變得無關緊要了。其次,有些實作是特定于供應商的,并且仍然需要時間和資源來讓項目在不同的環境中運作。當然,這取決于項目的複雜性。一個簡單的示例應用程式将從任何一個開始,但不是一個複雜的。
  • 另一方面,Spring隻支援VMWare,它被認為是其他庫的包裝器,将它們耦合在一起,提供更容易的通路和配置功能——如果您知道如何做到這一點的話。但是Spring應用程式可以在一個成熟的JEE伺服器上運作,也可以在輕量級JSP容器中運作,比如Jetty、Tomcat或Netty,避免了巨大的開銷。Spring甚至可以在獨立模式下運作,因為Spring引導子產品可以包裝Jetty或Tomcat。

    性能

  • 對JEE與Spring的大多數比較測試都存在缺陷。隻有良好的負載和壓力測試,以及持續的基準測試才能真正分析應用程式中的瓶頸。事實是,一個或另一個容器可能更适合于任何特定的情況。

學習曲線

當然,無論是Spring還是JEE,學習曲線都是陡峭的。讓我們從地面開始。複雜性是感覺、經驗、知識、情緒、勇氣的問題。這一切都不容易,但同樣的想法仍然存在于雙方——相反的技術是一個複雜的結,它會在你試圖解決某一特定任務的時候偷走你的時間。(并不是真的有這樣的強硬的Spring或有思想的人:)我發現Spring是邏輯結構,而類名TransactionAwareConnectionFactoryProxyUserCredentialsConnectionFactoryAdapter看起來吓人,他們描述的實作類沒有挖掘教程。另一方面,JEE依賴于零散的規範。但是,通過了解應用程式的哪一部分需要了解,您可以在适當的指南中找到它。這兩個架構都有大量的例子和指南。最後,Spring和JEE建立在相同的原則之上,以提供Java web應用程式開發的工具。如果您了解基本的軟體模式和設計,您将能夠了解其中任何一個