2017-11-10 14:01:31 1607瀏覽
在Java社區(qū)中,Spring與Java EE之爭(zhēng)是個(gè)永恒的話題。在這場(chǎng)爭(zhēng)論中,來(lái)自兩個(gè)陣營(yíng)的布道師、架構(gòu)師與鐵桿粉絲都在不遺余力地捍衛(wèi)著本方的尊嚴(yán),并試圖說服對(duì)方加入到自己的陣營(yíng)當(dāng)中,但結(jié)果卻是雙方都很難說服對(duì)方,每一方都有充分的理由表明自己的選擇是正確的。那么對(duì)于普通開發(fā)者來(lái)說該如何思考這場(chǎng)曠日持久的Spring與Java EE之爭(zhēng)呢?
Siva是一位充滿激情的JavaEE開發(fā)工程師、開源布道師、知名博主,擅長(zhǎng)Java、Struts、Hibernate、Spring等各項(xiàng)技術(shù)與框架。Siva既使用過Spring,也使用過Java EE,但他既不是Spring的鐵桿粉絲,也不是Java EE的忠實(shí)追求者。相反,他對(duì)于Spring與Java EE有著自己的理解和認(rèn)識(shí),并且在項(xiàng)目當(dāng)中會(huì)根據(jù)具體需求選擇適合的技術(shù)。近日,Siva分享了他對(duì)于Spring與Java EE的一些認(rèn)識(shí)和理解,希望能對(duì)各位讀者起到幫助作用。
業(yè)務(wù)方面
在很多組織中,技術(shù)選擇并不完全是由開發(fā)者決定的。具體來(lái)說,如果你工作在一家大型的企業(yè)組織中,那么極有可能會(huì)有一個(gè)專門的架構(gòu)師團(tuán)隊(duì)負(fù)責(zé)決定在項(xiàng)目中該使用什么平臺(tái)、框架與庫(kù)。除此之外,大型企業(yè)在選擇技術(shù)平臺(tái)時(shí)還會(huì)考慮如下幾個(gè)方面:平臺(tái)、語(yǔ)言、框架與庫(kù)的成熟度、商業(yè)支持、許可費(fèi)用等。
作為一名開發(fā)者,你可能無(wú)法影響上述幾方面的決策制定過程,特別是對(duì)于那些處于離岸開發(fā)中心的開發(fā)者來(lái)說更是如此。因此,對(duì)于開發(fā)者來(lái)說,你可能無(wú)需過多關(guān)注于上述幾個(gè)方面。如果你非常熟悉Spring,那么掌握J(rèn)ava EE也不是什么難事,反之亦然,我非常奇怪有人會(huì)說他是個(gè)Java EE專家,但卻無(wú)法理解Spring,反之亦然。無(wú)論Java EE還是Spring都使用了同樣的核心APIs(Servlet、JPA、JMS、BeanValidation等),差別在于到底是什么將這些東西粘合到了一起,是Spring還是應(yīng)用服務(wù)器。
雖然對(duì)于依賴注入(Spring DI、CDI)、REST(JAX-RS、SpringMVC)等存在著不同的APIs,但他們彼此之間的行為卻是非常類似的??赡苡腥藭?huì)說CDI在類型安全上要比Spring DI更好,比如說:
如果只有一個(gè)Spring/CDI Bean,那么使用@Autowired或是@Inject都是沒問題的。如果有兩個(gè)Spring或CDI Bean實(shí)現(xiàn),那么注入就會(huì)失敗并拋出錯(cuò)誤,說“找到了多個(gè)可注入的對(duì)象”。使用@Produces或@Bean注解的方法可以實(shí)現(xiàn)自定義的Bean提供器。只要二者行為類似,那么我就不關(guān)心誰(shuí)的實(shí)現(xiàn)是更加類型安全的,誰(shuí)在內(nèi)部實(shí)現(xiàn)中采用了基于String的映射。我想說的是,怎么可能有人是Spring專家但卻無(wú)法理解Java EE呢,反之亦然。一個(gè)Spring專家要花多長(zhǎng)時(shí)間才能掌握J(rèn)ava EE呢?
Spring與Java EE哪一個(gè)對(duì)開發(fā)者更加友好呢?
我認(rèn)為到現(xiàn)在為止,很多開發(fā)者應(yīng)該能夠認(rèn)識(shí)到一項(xiàng)技術(shù)的成功與否其實(shí)并不完全取決于自身的優(yōu)缺點(diǎn),還要取決于開發(fā)者的使用率。通過Java EE視頻教程與Spring教程的學(xué)習(xí)對(duì)比,我們要認(rèn)識(shí)的重要一點(diǎn)是:“并不是每一個(gè)軟件開發(fā)者都是明星開發(fā)者,還有很多處于中等水平的開發(fā)者”。為了讓人們能夠使用某一個(gè)框架或技術(shù),框架或技術(shù)本身要貼合這一部分人的需求。我覺得Spring在這方面做得非常好,它提供了諸如Spring Boot、用戶指南等工具幫助開發(fā)者上手。Spring Security、Spring Integration、Spring XD、Spring Social等項(xiàng)目都很好地解決了業(yè)務(wù)的需求。此外,Spring還提供了各種各樣的模板,讓人們能夠輕松上手開發(fā)而無(wú)需編寫大量的樣板代碼。
Java EE也通過JBoss Forge、Wildfly Swarm等工具幫助開發(fā)者上手。除了Picketlink之外,我?guī)缀蹩床坏接心男㎎ava EE框架提供了安全解決方案;但即便是Picketlink,我覺得也過于復(fù)雜了。我想表達(dá)的觀點(diǎn)是“Spring能做到的事情,Java EE基本上也都能做”。區(qū)別在于哪一個(gè)會(huì)為普通開發(fā)者提供開箱即用的支持。
扣丁學(xué)堂有專業(yè)的JavaEE老師教導(dǎo)學(xué)員,不僅有與時(shí)俱進(jìn)企業(yè)級(jí)的項(xiàng)目開發(fā)Java EE培訓(xùn),還有大量的JavaEE視頻教程供學(xué)員觀看學(xué)習(xí)。想要名師錄制的JavaEE視頻教程的朋友們抓緊時(shí)間聯(lián)系我們的咨詢老師吧。Java技術(shù)交流群:670348138。
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>