我堅信,作為Java開發人員,我必須保持(至少很少)最新技術的更新。 因此,我(許多Java開發人員)通常都會關注Java社區的網站或博客,以了解Java社區的最新情況。 特別是,我確實關注一些Java冠軍或知名作家的最新消息,因為他們可能對Java領域的下一個重大事物有更好的了解。
幾年前,我見過很多人談論春天。 然后我開始學習Spring,但仍然喜歡它。 我已經使用JavaEE5兩年了,但是我沒有發現Spring沒有提供的任何功能。 但是最近,我每兩天看到太多關于“從Spring遷移到JavaEE6”的文章。 因此,我想嘗試一下,我安裝了NetBeans7.1,Glassfish3.1并做了一個簡單的POC。 太好了,我僅用10分鐘就可以編寫一個簡單的應用程序。
是的,JavaEE6在其前身方面進行了很多改進。
但是我再也沒有看到Spring無法做到的任何新事物。
好的,讓我分享我對“從Spring遷移到JavaEE6”文章作者選擇的標準的看法。
1. WEB-INF / lib中有很多Jar
Spring應用程序在WEB-INF / lib中具有依賴性,而JavaEE6應用程序在服務器lib中具有依賴性。 即使對于Spring應用程序,我們也不需要手動下載所有這些Jar,我們可以使用Maven / Ivy,甚至可以從配置了所有依賴項的原型模板開始。 而且這是唯一的工作。 我不確定通過在服務器庫中而不是WEB-INF / lib中使用jars可以提高性能。 如果是這種情況,我們可以將Spring應用程序依賴項放在服務器庫中。
我在這里想念的是什么?
2.類型安全的依賴注入
從Spring 2.5開始,我們使用@Autowired提供了基于注釋的DI支持,如果您仍然說Spring是基于XML的,請查看Spring3.x。 如果您想給spring bean指定一個自定義名稱(如果對同一接口有多個實現),則可以。 它與JavaEE6的CDI @Injext和@Named有何不同?
3.約定優于配置
EJB3方法默認情況下是事務性的,只需使用@Stateless對其進行拍擊即可。 在Spring中,我們可以創建一個自定義StereoType,例如@TransactionalServe,例如@Service @Transactional public @interface TransactionalServe {},并且可以實現Convention over Configuration。
我在這里想念什么嗎?
4. Spring依賴JavaEE
當然,Spring依賴于JavaSE和JavaEE。 Spring只是使開發變得容易。 您始終可以通過更簡單的方式在Spring中使用JEE,JPA,JavaMail等JavaEE API。 有人說Spring完全消失了JavaEE嗎? 沒有。
5.基于標準,App Server支持,許可等等。
這些是開發人員沒有太多(任何)控制的事情。 從開發人員的角度來看,我們喜歡使開發變得更容易的一切。 因此,我沒有看到任何有效的理由將現有的Spring應用程序遷移到JavaEE6。 到現在為止,我還沒有找到CDI可以做的事情和Spring不能做的事情。 對于僅進行依賴注入的新建項目,我們可能不需要Spring,因為我們已經在JavaEE6中內置了CDI。 JavaEE6是否解決以下任何問題:
1. 批處理 :幾乎所有大企業都有一些批處理作業要運行。 JavaEE6是否支持實現它們。 您是否建議使用Spring Batch或在原始JavaEE6中從頭開始。
2. 社交網絡集成 :這些天來,Web應用程序與社交網站進行集成已成為非常普遍的要求。 同樣,您在JavaEE6中擁有什么呢? 3. 環境配置文件:在Spring中,可以在“測試”配置文件中啟用我的模擬服務,在“生產”配置文件中啟用我的真實服務。 我知道@Alternative,但是我們可以在不使用基于String的注入的情況下配置兩個以上的替代方法嗎? 4. Web應用程序安全性: JavaEE6中Spring-security的對應部分是什么? 5.如何與NoSQL,Flex,移動開發等集成?
JavaEE6現在獲得了CDI,因此Spring突然成為了遺產!
結論:是的,JavaEE6現在(很晚才有)很酷的東西,但是無論如何它不會取代Spring。 春天萬歲。
參考: JavaEE6必須從Spring獲得哪些附加功能? 我的JCG合作伙伴 Siva Reddy的“ 我在技術上的實驗”博客中。
翻譯自: https://www.javacodegeeks.com/2012/04/what-additional-features-does-java-ee-6.html