開發者眼中的Spring與JavaEE

JavaEE與Spring

Java社區中,Spring與Java EE之爭是個永恆的話題。在這場爭論中,來自兩個陣營的佈道師、架構師 與鐵桿粉絲都在竭盡全力地捍衛着本方的尊嚴,並試圖說服對方加入到本身的陣營當中,但結果倒是雙方都很難說服對方,每一方都有充分的理由代表本身的選擇是 正確的。參與到這場爭論的有一些架構師,他們負責着平臺的選擇。那麼對於普通開發者來講該如何思考這場曠日持久的Spring與Java EE之爭呢?html

Siva是一位充滿激情的Java開發者、開源佈道師、知名博主,擅長Java、Struts、hibernate、 Spring等各項技術與框架。Siva既使用過Spring,也使用過Java EE,但他既不是Spring的鐵桿粉絲,也不是Java EE的忠實追求者。相反,他對於Spring與Java EE有着本身的理解和認識,而且在項目當中會根據具體需求選擇適合的技術。近日,Siva分享了他對於Spring與Java EE的一些認識和理解,但願能對各位讀者起到幫助做用。java

業務方面

在不少組織中,技術選擇並不徹底是由開發者決定的。具體來講,若是你工做在一家大型的企業組織中,那麼極有可能會有一個專門的架構師團隊負責決定在項目中該使用什麼平臺、框架與庫。除此以外,大型企業在選擇技術平臺時還會考慮以下幾個方面:spring

  • 平臺、語言、框架與庫的成熟度
  • 商業支持
  • 許可費用等

做爲一名開發者,你可能沒法影響上述幾方面的決策制定過程,特別是對於那些處於離岸開發中心的開發者來講更是如此。所以,對於開發者來講,你可能無需過多關注於上述幾個方面。安全

若是你很是熟悉Spring,那麼掌握Java EE也不是什麼難事,反之亦然。

我 很是奇怪有人會說他是個Java EE專家,但卻沒法理解Spring,反之亦然。不管Java EE仍是Spring都使用了一樣的核心APIs(Servlet、JPA、JMS、BeanValidation等),差異在於究竟是什麼將這些東西粘 合到了一塊兒,是Spring仍是應用服務器。服務器

雖然對於依賴注入(Spring DI、CDI)、REST(JAX-RS、SpringMVC)等存在着不一樣的APIs,但他們彼此之間的行爲倒是很是相似的。可能有人會說CDI在類型安全上要比Spring DI更好,好比說:架構

  • 若是隻有一個Spring/CDI Bean,那麼使用@Autowired或是@Inject都是沒問題的。
  • 若是有兩個Spring或CDI Bean實現,那麼注入就會失敗並拋出錯誤,說「找到了多個可注入的對象」。
  • 使用@Produces或@Bean註解的方法能夠實現自定義的Bean提供器。

只要兩者行爲相似,那麼我就不關心誰的實現是更加類型安全的,誰在內部實現中採用了基於String的映射。我想說的是,怎麼可能有人是Spring專家但卻沒法理解Java EE呢,反之亦然。一個Spring專家要花多長時間才能掌握Java EE呢?框架

Spring與Java EE哪個對開發者更加友好呢?

我 認爲到如今爲止,不少開發者應該可以認識到一項技術的成功與否其實並不徹底取決於自身的優缺點,還要取決於開發者的使用率。咱們要認識的重要一點是:「並 不是每個軟件開發者都是明星開發者,還有不少處於中等水平的開發者」。爲了讓人們可以使用某一個框架或技術,框架或技術自己要貼合這一部分人的需求。我 以爲Spring在這方面作得很是好,它提供了諸如Spring Boot、用戶指南等工具幫助開發者上手。Spring Security、Spring Integration、Spring XD、Spring Social等項目都很好地解決了業務的需求。此外,Spring還提供了各類各樣的模板,讓人們可以輕鬆上手開發而無需編寫大量的樣板代碼。工具

Java EE也經過JBoss Forge、Wildfly Swarm等工具幫助開發者上手。除了Picketlink以外,我幾乎看不到有哪些Java EE框架提供了安全解決方案;但即使是Picketlink,我以爲也過於複雜了。我想表達的觀點是「Spring能作到的事情,Java EE基本上也都能作」。區別在於哪個會爲普通開發者提供開箱即用的支持。post

缺少上下文的爭論

當Spring陣營與Java EE陣營的人開始爭論時,註定是沒有終點的。但遺憾的是,爭論不少時候都圍繞着毫無心義或是過期的點上面,好比說下面這些:網站

大量使用XML

Java EE粉絲一開始就會說Spring大量使用了XML,我憎惡XML之類的。若是你還在使用Spring 2.5如下的版本,而後就認爲Spring中充斥着大量的XML,那麼我想說你醒醒吧,到http://spring.io看看。

EJB與JSF都是垃圾

Spring粉絲會猛烈抨擊EJB與JSF,就好像他們仍是EJB 2.x或JSF 1.x那樣。若是仔細看看EJB 3.x與JSF 2.x,那麼他們就不會有這個想法了。不要拿6年前EJB2.x的老眼光看待如今的EJB 3.x。

重量級與輕量級

這 裏的「重量級」指的是運行時狀況。在將託管Beans部署到Java EE容器中時,容器會爲其生成代理並注入全部的企業服務(事務、安全等),對於Spring來講,則是經過Spring AOP來實現的。這裏其實沒有辦法斷定哪種方式更加劇量級,容器代理呢,仍是Spring AOP代理,不過我以爲兩者之間的差異並不太大。有些人會將部署的war包大小做爲判斷是否「重量級」的一個依據。在這種狀況下,Java EE應用服務器 + war與Spring App + 126 jar之間的差異卻是很明顯。

廠商鎖定

我 認爲選擇平臺時能夠不依賴於某個特定的廠商是很重要的,不過純粹基於能夠遷移到另一個實現這一理由來選擇平臺也是不恰當的。能夠想一想,你有多少機會會從 一個服務器遷移到另一個服務器?選擇一個平臺時沒必要鎖定到某個廠商是個「錦上添花」的行爲,但毫不應該將其做爲關鍵因素。

咱們不須要外部程序庫

這就是所謂的「爲了爭論而爭論」。給我看看有哪一個應用不須要其餘依賴?若是你說你要開發本身的日誌庫,編寫本身的HTTP客戶端、開發本身的通用庫,那麼我只能說這樣的開發者也算是奇葩了,放着現成的不用,還要「從新發明輪子」。

你如今使用的是X,你應該遷移到Y

我 發現不少社區站點都存在這樣的觀點,特別是在Reddit。當有人發出關於Java EE與Spring的帖子時,就會有兩撥人蔘與進來,猛烈抨擊對方,緣由就是對方沒有使用本身鍾愛的平臺。先想想,若是Spring是垃圾,那怎麼還會 有那麼多人使用並喜歡它呢。若是Java EE很差,那爲什麼還會有人從Spring遷移到Java EE上呢。每一個平臺都有長處。你要作的就是尊重他人。若是可能,問一下他們爲什麼要選擇這個平臺,是否是有你不知道的理由在裏面呢?

做 爲一名熱情的Java開發者,我真心但願在關於Java EE與Spring之間的爭論中能找到我以前不瞭解的東西,好比說「在哪些狀況下,Spring要比Java EE更合適;在哪些狀況下,Java EE要比Spring更好」。我但願Spring與Java EE更夠造成良性競爭,讓自身變得愈來愈好。這樣,不管誰最終贏得了競爭,受益的仍是廣大開發者們,由於他們擁有了更爲強大的平臺。

 

轉自http://www.infoq.com/cn/news/2015/07/spring-javaee

相關文章
相關標籤/搜索