JavaSE、JavaEE与Spring的概念和异同点剖析
JavaSE、JavaEE與Spring的概念和異同點剖析
什么是JavaSE
JavaSE是Java的核心,也就是 Java的主要部分。用于開發(fā)桌面應用程序和基于web的應用程序。它提供了從基本對象到高級類的所有東西,這些類被用于網(wǎng)絡、數(shù)據(jù)庫訪問、安全、xml解析、gui開發(fā)。除了這些核心的api之外,它還提供了虛擬機JVM、開發(fā)工具、部署技術(shù)等。
什么是JavaEE
JavaEE是一個抽象的規(guī)范。具體實現(xiàn)稱為應用服務器,如GlassFish、WildFly、WebLogic等。當你從Oracle站點下載JavaEE時,它將給你提供大量文檔和示例的GlassFish服務器。因此,它們只是提供了Java Enterprise Edition規(guī)范的實現(xiàn)。你還可以使用其他的實現(xiàn),比如RedHat WildFly,它也遵循這些規(guī)范。因此,J2EE是1999年-2003年JavaEE的抽象規(guī)范的版本名稱。EJB遵循JavaEE規(guī)范,所以EJB屬于JavaEE。
什么是Spring
Spring遵循所有的JavaEE規(guī)范嗎?嚴格的說不是。Spring是一個獨立的框架,它替代并改進了JavaEE的許多部分,你可以將Spring視為一個集成平臺,允許你使用所有JavaEE技術(shù)。這意味著你不一定需要完整的fledge JavaEE應用服務器來支持,你可以在像Tomcat這樣的簡單的servlet容器上運行它。Spring是一個獨立的集成平臺,在JavaEE中有改進和替換,也允許你使用JavaEE技術(shù)。
JavaEE與Spring的區(qū)別
Rod Johnson帶著他的革命書籍《J2EE Development without EJB》,描述了新的Spring框架的特性。它就像一股新鮮空氣,很快,Spring的直覺依賴注入功能成為了控制反轉(zhuǎn)IOC設計模式的實際標準實現(xiàn),從那時起,J2EE和Spring都在發(fā)展,盡管Spring似乎總是在前進。spring引入的所有最佳功能后來都被標準企業(yè)Java采納,包括:spring ioc在J2EE中實現(xiàn)為容器依賴注入CDI;J2EE作為JSR 352實現(xiàn)的spring批處理:Java平臺的批處理應用程序。公平地說,在Java中很酷的新功能,比如注解,也會導致對spring的修改,除了在第三次迭代中提供基于注解的配置之外,spring也變得模塊化,至少在一定程度上歸功于maven的盛行,它引入了一種解決和管理依賴第三方庫的新方法。事實上,J2EE和spring繼續(xù)相互影響并相互鼓勵,比如當J2EE7引入了web prifile的模塊化,開發(fā)了jax的開發(fā)人員,并促進了更輕量級的企業(yè)應用程序。類似的,從Java8的JCP 335和JCP 310的日期和時間API,在spring中激發(fā)了新的增強。可無論是J2EE還是spring的支持者都傾向于認為它們是相互排斥的。
讓我們來看看在一個更平衡的環(huán)境中進行比較
JavaEE
JavaEE行業(yè)認可的標準API框架;它主要基于注釋和CDI;用于WEB開發(fā)的JFC MVC框架;用于進程數(shù)據(jù)庫操作的JPA實現(xiàn);JTA API和實現(xiàn);基于EJB容器和POJO的實現(xiàn);Oracle許可證。
spring
基于ioc和aop;基于xml配置,目前使用的是注解;使用spring dao框架連接到數(shù)據(jù)庫,基于模板設計patter;提供抽象層以支持各種JTA實現(xiàn)供應商;與不同的Java廠商的不同支持不同的功能,這樣容易與struts2等集成;提供端到端平臺構(gòu)建web應用程序,實現(xiàn)使用DI和AOP的松散耦合;開放源碼許可。
spring的實現(xiàn)重點與J2EE的標準化和可移植性
springsource社區(qū)與Java社區(qū)過程的主要區(qū)別在于其不同的動機。springsource的創(chuàng)新來自于解決現(xiàn)實世界問題的需要。解決方案以解決問題為導向,這樣下一個步驟和整個項目就可以盡可能快速和順利地實現(xiàn)。JCP有點像公司,創(chuàng)新和決策與解決方案如何導致標準技術(shù)規(guī)范相關(guān)聯(lián)。另外,像Oracle、IBM、RedHat
甚至SpringSource參與JCP。大多數(shù)Java規(guī)范請求都 需要很長的路徑才能實際實現(xiàn)。例如,jsr303:Bean驗證需要三年才能完成。也許在這個領(lǐng)域,速度并沒有那么重要,因為大多數(shù)大型企業(yè)項目不會經(jīng)常發(fā)生變化,而且會有更長的生命周期。他們甚至可能不想要所有罪行的、但未經(jīng)證實的技術(shù)。J2EE的另一個論點是可移植性。簡而言之,J2EE是一組規(guī)范,在你的應用程序中使用的東西可以被拉入你選擇的任何J2EE兼容的容器中,簡單地說,用一些常規(guī) 的方法來包裝業(yè)務邏輯 ,為CRUD操作 提供持久性,然后從14個J2EE供應商中選擇。理想情況下,你應該能夠在不同服務器之間移動代碼。這有時行得通,首先,現(xiàn)在只有三個供應商支持J2EE7,所以很多都變得無關(guān)緊要了。其次,有些實現(xiàn)是特定于供應商的,并且仍然需要時間和資源來讓項目在不同的環(huán)境中運行。當然,這取決于項目的復雜性,一個簡單的示例應用程序?qū)娜魏我粋€開始,但不是一個復雜的。另一方面,spring只支持VMWARE,它被認為是其他庫的包裝器,將他們耦合在一起,提供更容易的訪問和配置功能–如果你知道如何做到這一點的話。但是spring應用程序可以在一個成熟的J2EE服務器上運行,也可以在輕量級JSP容器中運行,比如Jetty,Tomcat,Netty,避免了巨大的開銷。spring甚至可以在獨立模式下有運行,因為spring引導模塊可以包裝Jetty或Tomcat。對J2EE與Spring的大多數(shù)比較測試都存在缺陷。只有良好的負載和壓力測試,以及持續(xù)的基準測試才能真正分析應用程序中的瓶頸。事實上,一個或另一個容器可能更適合于任何特定的情況。
學習曲線
當然,無論是spring還是J2EE,學習曲線都是陡峭的。然我們從地面開始,復雜性是感知、經(jīng)驗、只是、情緒和勇氣的問題,這一切都不容易,但同樣的想法仍然存在于雙方–相反的技術(shù)是一個復雜的結(jié),它會在你試圖解決某一特定任務的時候偷走你的時間。我發(fā)現(xiàn)spring是邏輯結(jié)構(gòu),而類名TransactionAwareConnectionFactoryProxyUserCredentialsConnectionFactoryAdapter看起來嚇人,他們描述的實現(xiàn)類沒有挖掘教程。另一方面,J2EE依賴于零散的規(guī)范,但是,通過了解應用程序的哪一部分需要理解,你可以在適當?shù)闹改现姓业剿?#xff0c;這兩個框架都有大量的例子和指南。最后,spring和J2EE建立在相同的原則之上,以提供Java web應用程序開發(fā)的工具,如果你了解基本的軟件模式和設計,你將能夠了解其中任何一個。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的JavaSE、JavaEE与Spring的概念和异同点剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【客户下单】后台系统自动分单成功生成工单
- 下一篇: shiro实现url级别的权限控制(用户