為什么我會在2012年的新企業Java項目中使用Java EE而不是Spring

這個問題經常出現。 我的新項目也在2011年11月發布。 在這個新的Enterprise Java項目中,我將使用Java EE(JEE)代替Spring框架。

我知道:關于此主題的文章,博客和論壇討論都可以找到。 為什么還需要一個? 因為許多博客都在談論Java EE的舊版本,或者它們不是中立的(我希望是中立的)。 而且由于許多人仍然認為感謝EJB很繁重! 而且因為時間已經改變:現在是Java EE 6時代,J2EE已死。 最后! 最后,因為不僅可以使用JEE 6,而且還可以使用多個應用程序服務器(不只是Glassfish作為參考實現)。 我不想發動一場火焰戰爭(已經存在太多),我只想描述一下我對JEE與Spring“戰斗”的個人看法……

因此,我認為從簡短的概述和兩種選擇的歷史入手非常重要。 然后,我將列出兩者的差異,并解釋為什么對于大多數新的Java項目而言,這些差異導致我使用JEE而不是Spring。 我明確地在談論新的應用程序。 如果必須擴展現有應用程序,請繼續使用現有框架!

另一個免責聲明:我正在談論關鍵任務企業Java應用程序。 我不是在談論一些內部應用程序或其他不重要的內容。 我還更喜歡將Scala,Groovy和Clojure的組合持久化到NoSQL數據庫,同時將其部署在JBoss OpenShift或VMware CloudFoundry等PaaS云服務中……

有關JEE和Spring的一般信息

首先,我想總結一些有關JEE和Spring的一般信息:

  • 最后,這兩種選擇都由幾個庫組成,開發人員可以使用它們來創建企業應用程序。
  • 兩者都可以在大多數用例中使用,它們具有非常相似的功能(業務邏輯,事務,Web框架等等)–它們僅在實現上有所不同(例如,Spring中的聲明性事務與JEE中的約定)。
  • 您也只能使用一個或某些可用庫。 您甚至可以將JEE和Spring東西結合起來。
  • 通常,關鍵問題是:“我應該使用JEE(即,尤其是EJB,JPA,CDI等)或Spring核心框架(即,尤其是Spring Application Context,Spring Bean等)來實現我的新應用程序嗎? 通常,您可以選擇兩者,從最終用戶的角度來看都沒關系。 但是您不應該將兩者合并,這只會帶來更高的復雜性。
  • 關于選擇哪種替代方案一直存在爭議。 中立地討論這個問題非常困難。 這就是為什么幾乎所有討論都以贊美一個框架然后抨擊另一個框架而結束的原因(我希望在本博文中保持中立)。

歷史:J2EE太可怕了,因此Spring幫助了!

J2EE太可怕了。 如此多的XML配置,如此之多的接口以及如此la腳的應用服務器。 這就是創建Spring框架的原因。 它解決了J2EE的許多問題。 它輕巧,易于使用,并且可以將應用程序部署在Web容器(例如Tomcat)中,而不是部署在笨重的J2EE應用程序服務器中。 部署花費了幾秒鐘而不是15分鐘。 不幸的是,JRebel當時不存在。 Spring框架不是J2EE的標準,但是它變得非常普遍,并且產生了一個龐大的社區。

JEE“偷”了輕量級的Spring創意!

一切始于一些捷徑的改變。 J2EE已死。 新的快捷方式是JEE。 JEE 5誕生于2006年。它“竊取”了許多好的,輕量級的想法,例如來自Spring和其他框架的“基于配置的約定”或“依賴注入”。 是的,JEE應用服務器仍然很笨重,幾乎不可能進行測試。 盡管如此,開發JEE應用程序對JEE 5還是很有趣的。創建EJB時不必編寫20個接口。 哇,太神奇了!

然后,2009年發布了JEE 6。 開發是如此簡單。 最后! 例如,您只需要添加一個注釋,您的EJB就可以使用了! 當然,Spring框架的開發人員沒有睡覺。 添加了許多新內容。 今天,您可以創建一個沒有任何XML文件的Spring應用程序,就像幾周前我在“ No Fluff Just Stuff”文章中所讀到的一樣。 此外,在Spring堆棧中添加了一些非常酷的框架,例如Spring Integration,Spring Batch或Spring Roo。
如今(2011年11月),JEE和Spring都非常普及,并擁有龐大的社區。 兩者都有很多信息,例如書籍,博客,教程等。 因此,在描述了JEE和Spring的發展之后,為什么在大多數新的Java項目中使用JEE?

JEE和Spring的優缺點

必須做出決定。 在新項目中使用哪種替代方法? 讓我們看看兩者的利弊。 我將在Spring的優勢上添加一個“ BUT”-這些“ BUT”是我更喜歡JEE而不是Spring的原因。

JEE的優勢

  • JEE是一組標準規范,因此與供應商無關。 通常,規范存在幾種實現。
  • 可持續性:嗯,這是幾個大型公司支持的標準的優勢。
  • 是的,信不信由你,測試是可能的! 輕量級的應用程序服務器和框架(例如Arquillian)進入了JEE世界!
  • 約定超越配置無處不在,而不是明確的(我知道有些人會不同意這是一個優勢)。

彈簧的優點

  • 您不需要笨重的JEE應用程序服務器,可以將應用程序部署在Web容器(例如Tomcat)中。

但是:JEE應用程序服務器并不像幾年前那樣繁重。 此外,也可以使用JEE Web配置文件。 您不必使用Tomcat或Jetty來減輕重量!

  • Spring提供了JEE標準無法提供的功能,例如Spring Batch。

但是:您可以毫無問題地將這樣的庫添加到JEE項目中。 如果需要,還可以添加其他Spring庫,例如JDBCTemplate或JMSTemplate(它們有助于減少一些樣板代碼)。

  • Spring提供了更多的靈活性和功能,例如,面向方面的編程比JEE攔截器更強大。

但是:在大多數項目中,您不需要這種靈活性或功能。 如果確實需要,請使用Spring,而不是JEE-當然!

  • 更快的發布(因為它不是標準,只有一個供應商)。 對市場需求的反應要快得多。 當前的一些示例:云,移動,社交計算。

但是:我看到的所有企業項目(包括許多不同的客戶)都不那么靈活。 企業應用程序不會每月或每年更改。 如果有一個項目,可以很容易地更改版本,那么在某些情況下,Spring可能比JEE更好。 但是在大多數企業項目中,您不能簡單地從Spring 2.5升級到Spring 3.x或從JEE 5升級到JEE6。我希望這是可能的,但是在擁有數千名員工的大公司中,靈活性和政治規則較低。

結論:我將在大多數新的Enterprise Java項目中使用JEE

由于我在“ BUT”部分中針對Spring進行解釋的原因,我將在大多數新的Enterprise Java項目中選擇JEE。 不過,有時我也會使用Spring庫(例如Spring Batch)。 有時,我什至必須使用Spring(如果我需要它的靈活性或強大功能),但是只有這樣,我才選擇它。 當然,對于現有項目,我將繼續使用已經使用的框架。 我可能不會將Spring 2.5應用程序遷移到JEE,而是將其遷移到Spring 3.x!

因此,我已經說明了為什么在大多數新的Enterprise Java項目中使用JEE的原因。 如果我錯過了一些事情,或者您有其他意見(可能有很多人),則可以在評論中讓我失望。 我感謝所有的“非戰爭”討論……

參考: 為什么我將在 JCG合作伙伴的 2012年新的Enterprise Java項目中使用Java EE而不是Spring ? 關于Java EE / SOA /云計算的博客的Kai Wahner。


翻譯自: https://www.javacodegeeks.com/2012/03/why-i-will-use-java-ee-instead-of.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373463.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jsp mysql 音樂網站_Maven+JSP+SSM+Mysql實現的音樂網站

項目簡介本系統基于MavenJSPSSMMysql實現的音樂網站。主要實現的功能有音樂播放、下載、上傳等幾個模塊。難度等級:中等技術棧編輯器Eclipse Version: 2020-03 (4.15.0)前端技術基礎:htmlcssJavaScript框架:JQueryBootstrap后端技術SpringSpr…

遙感影像濾波處理軟件 — timesat3.2

最近因為要做遙感影像的濾波處理,經過女神推薦,決定用Timesat,可是該軟件3.1版本只適合xp系統以及2011的matlab,后來在官網上找到了最新的3.2版本。支持64位操作系統以及2014的matlab。大家可以直接上官網(http://www.…

持久化API(JPA)系列(三)實體Bean的開發技術-建立與數據庫的連接

在EJB 2.x中。EJB有3種類型的Bean。各自是會話Bean(Session Bean)、消息驅動Bean(Message-Driven Bean)和實體Bean(Entity Bean)。 隨著EJB 3的推出,EJB2.x中的實體Bean逐漸被JPA規范所替代&…

WebSphere Classloader內存泄漏預防

解決應用程序類加載器泄漏 應用領域 傾向于: 使用應用程序類加載器中的Runnable實現啟動新線程。 即使JEE編程模型不支持此功能,客戶也經常直接創建新線程或通過使用間接創建它們 計時器 客戶必須確保在停止相應的應用程序(或WAR模塊&…

airflow sql_alchemy_conn mysql_airflow使用mysql數據庫,LocalExecutor并發調度

mysql-airflow在mysql上執行create database airflow; —— 創建數據庫GRANT all privileges on airflow.* TO airflow% IDENTIFIED BY 123456; —— 將數據庫airflow的所有權限授權airflow用戶,密碼123456且該用戶可在任何IP段登錄操作FLUSH PRIVILEGES; —— 刷新…

【SAP業務模式】之ICS(四):組織單元的配置

SAP的ICS業務后臺配置主要有以下幾個配置點: 1、組織單元的配置(公司代碼、銷售組織、工廠、采購組織等); 2、主數據的部分; 3、訂單和開票的定價過程; 4、開票輸出類型; 5、公司間發票的配置&a…

poj-2478 Farey Sequence(dp,歐拉函數)

題目鏈接&#xff1a; Farey Sequence Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14230 Accepted: 5624Description The Farey Sequence Fn for any integer n with n > 2 is the set of irreducible rational numbers a/b with 0 < a < b < n a…

Twitter4j和Esper:在Twitter上跟蹤用戶情緒

對于復雜事件處理和Twitter API的新手&#xff0c;我希望這是一個簡短的教程&#xff0c;可以幫助他們Swift起步。 管理大數據并從中挖掘有用的信息是當前技術中最熱門的討論主題。 來自Twitter&#xff0c;Facebook和Linkedin等社交網絡的半結構化數據的爆炸式增長使Hadoop&am…

webase crud查看所有表_Laravel-Gii 可視化代碼生成工具 CRUD +GUI

Laravel-Gii 可視化代碼生成工具 CRUD GUI適用于快速B端后臺開發&#xff0c;根據MySQL的表結構生成對應的Model、Observer、Controller、View、Route等相關項目文件[TOC]注意因為是解析MySQL的表結構&#xff0c;并且根據字段生成模板&#xff0c;所以目前生成的Model類時只支…

20145231第二周Java學習筆記

20145231 《Java程序設計》第2周學習總結 教材學習內容總結 本周的學習采用的依然是先看課本&#xff0c;再看視頻&#xff0c;然后實踐敲代碼&#xff0c;最后根據學習筆記總結完成博客。 第三章&#xff1a;基礎語法 知識點比較多比較零碎&#xff0c;整理的都是實際操作中可…

JavaFX 2.0和Scala,像牛奶和餅干

JavaFX 2.0和Scala都是很好的技術&#xff0c;但是一起使用時效果會更好。 JavaFX 2.0是一種功能強大的富客戶端技術&#xff0c;具有先進的圖形&#xff0c;動畫和媒體功能。 Scala是一種簡單但功能強大的語言&#xff0c;具有用于編寫特定于域的語言&#xff08;DSL&#xff…

ASP.NET WebAPi之斷點續傳下載(上)

前言 之前一直感覺斷點續傳比較神秘&#xff0c;于是想去一探究竟&#xff0c;不知從何入手&#xff0c;以為就寫寫邏輯就行&#xff0c;結果搜索一番&#xff0c;還得了解相關http協議知識&#xff0c;又花了許久功夫去看http協議中有關斷點續傳知識&#xff0c;有時候發覺東西…

貪吃蛇(C++實現,VC6.0編譯,使用了EasyX圖形庫)

程序效果&#xff1a; 代碼&#xff1a; //main.cpp 1 #include <iostream>2 #include<fstream>3 #include <graphics.h>4 #include <conio.h>5 #include<ctime>6 #include<windows.h>7 #include<mmsystem.h>8 #pragma comment(lib…

3.0 C++遠征:is a

4-4is_a 0.派生類Soldier繼承自基類Person //Person.h class Person { public:Person(string name "Jim");~Person();void play(); protected:string m_strName; };//Soldier.h class Soldier : public Person { public:Soldier(string name "James", in…

python中sorted的用法append_python sorted()排序詳解

排序&#xff0c;在編程中經常遇到的算法&#xff0c;我也在幾篇文章中介紹了一些關于排序的算法。有的高級語言內置了一些排序函數。本文講述Python在這方面的工作。供使用內置函數sorted()/list.sort()的使用簡單應用python對list有一個內置函數&#xff1a;>>> a[5…

云上的播放框架變得簡單:Openshift模塊

僅僅幾年前&#xff0c;找到一個負擔得起的Java Web應用程序托管解決方案是一項艱巨的任務&#xff0c;而尋找免費的托管解決方案是一項不可能的任務。 更不用說甚至考慮自動縮放&#xff0c;單命令部署&#xff0c;持續集成等事情&#xff0c;這都是科幻小說。 去年見證了云計…

C#中的yield return與Unity中的Coroutine(協程)(下)

Unity中的Coroutine&#xff08;協程&#xff09; 估計熟悉Unity的人看過或者用過StartCoroutine() 假設我們在場景中有一個UGUI組件&#xff0c; Image&#xff1a; 將以下代碼綁定到Image 1 using UnityEngine;2 using System.Collections;3 using System.Threading;4 using …

字節流轉化為文件流_C#文件轉換為字節流及字節流轉換為文件

本文講解了C#實現文件轉換為字節流的方法。文件轉換為字節流的步驟如下1、通過文件流打開指定文件(FileStream fs)&#xff1b;2、定義字節流(byte[] fileBytenew byte[fs.Length])&#xff1b;3、把文件讀取到字節流(fs.Read(fileByte,0,fileByte.Length))&#xff1b;4、關閉…

Spring和JSF集成:導航

我希望這是有關我在Spring和JavaServer Faces之間提供深度集成的努力的一系列博客中的第一篇。 這里提到的所有內容都是“正在進行中的工作”&#xff0c;因此&#xff0c;如果您簽出代碼&#xff0c;請注意它是一個不斷變化的目標。 期待一些粗糙的邊緣&#xff0c;如果有時會…

【CSS3動畫】transform對文字及圖片的旋轉、縮放、傾斜和移動

前言&#xff1a;之前我有寫過CSS3的transform這一這特性&#xff0c;對于它的用法&#xff0c;還不是很透徹&#xff0c;今天補充補充&#xff0c;呵呵 你懂的&#xff0c;小司機準備開車了。 a)再提一提transform的四個屬性 ①旋轉--->rotate(參數a)&#xff0c;單位deg&a…