Spring 3和Java EE 6 –不公平和不完整的比較

這篇小文章的初稿標題為“ Spring&Java EE –比較蘋果和橙子”。 在撰寫本文時,我了解到可以比較Spring Framework和Java EE,但這始終是不公平且不完整的工作。

Java for Enterprise和Spring Framework的發展緊密地聯系在一起。 兩者相互依存,部分復制了好的概念。 在表1中,您可以看到一個簡化的時間表,其中包含Java平臺企業版和Spring框架的一些關鍵里程碑。

該表說明,僅將Java EE v6與Spring v3.0進行比較是有意義的。 Spring Framework和J2EE的早期版本已過時,并且Java EE v7仍未發布(實際上延遲到2013年第二季度 )。

表1:Java平臺和Spring框架的時間表

Java平臺,標準版 Java平臺企業版 Spring框架 關鍵 里程碑
2000 J2SE v1.3 J2EE v1.2.1 EJB 2
–困難的部署描述符
–困難的測試 –很多多余的工件
2001 J2SE v1.3
2002年
2003年 J2SE v1.4 J2EE v1.4
2004年 Springv1.0 第一個Spring框架
–依賴注入(IoP)
–沒有Java EE應用程序服務器 -J2EE的競爭對手
2005年 Springv1.2
2006年 J2SE v5 Java EE v5 Springv2.0 Java EE 5(EJB 3.0)
–許多功能受Spring啟發
–消除了組件,家庭和遠程接口
2007年 Springv2.5
2008年
2009年 Java SE v6 Java EE v6 Springv3.0 Java EE 6(EJB 3.1)
–接口是可選的
–單例豆 –類似cron的調度 –嵌入式容器 Spring3.0 –Spring表達語言 –具有改進的REST支持的MVC框架
2010年
2011年 Java SE v 7 Spring v 3.1

因此,在表2中列出了Spring Framework的主要構建塊。 控制容器的反轉是Spring框架的核心功能。 要了解其工作原理,您還可以檢查一個基于Spring框架的最小Java應用程序 (示例代碼使用Spring 2.5.6.A,但主要原理與Spring 3.0相同)。

表2:Spring v3.0框架的選定構建基塊

控制容器倒置 –控制反轉
–依賴注入
–使用XML文件和/或注釋進行配置(自動接線)
模型-視圖-控制器框架 –域對象(模型)
-通常,JSP模板(視圖)
-DispatcherServlet作為Controller的前控制器
面向方面的編程框架 –涉及各方面問題的基本AOP
–基于攔截,并在運行時進行配置
–使用XML文件和/或注釋進行配置
批處理框架 -處理大量的記錄或任務,包括:日志記錄,跟蹤,事務,作業管理,資源管理,異常轉換
數據訪問框架 –為流行的框架提供支持
– JDBC,iBatis,Hibernate,JDO,JPA,Oracle TopLink,Apache OJB和Apache Cayenne
交易管理框架 –抽象機制(JTA僅支持嵌套事務和全局事務,并且需要應用程序服務器)
遠程訪問框架 –使用Java平臺上可用的各種基于RPC的技術來進行客戶端連接和在服務器上導出對象

來源和進一步閱讀: http : //en.wikipedia.org/wiki/Spring_Framework

在表3中,列出了Java平臺企業版6的主要標準和組件。 該表清楚地表明Java EE 6包含許多標準,而不僅僅是一個框架。

表3:Java EE 6體系結構的選定構建塊

圖片來源 Java EE 6教程 ,p39

客戶端機器
– Java Server Faces(JSF 2.0)
– JSP標準標記庫(JSTL) –具有JavaServer Faces技術的Ajax – Facelets(XHTML) –支持表達語言(EL) –組件和頁面的模板 – Java Servlet技術(Servlet 3.0) –國際化和本地化Web應用程序 Java EE服務器 – Enterprise JavaBeans(企業Bean)組件 – JAX-RS RESTful Web服務 – JAX-WS Web服務端點 –企業Bean作為POJO(會話和消息驅動) –作為POJO的托管Bean –攔截器 – Java依賴注入(JSR 330) –上下文和依賴注入,CDI(JSR 299) –最小化部署描述符需求的注釋 –會話Bean中的異步方法調用 –聲明和程序安全 – Java消息服務(JMS)API – Java持久性API實體 堅持不懈 – Java數據庫連接API(JDBC) – Java持久性API 2.0 – Java EE連接器體系結構 – Java交易API(JTA)

來源和進一步閱讀: http : //olex.openlogic.com/wazi/2010/get-started-with-jee6/

實踐經驗

幾年前,當我開始學習Spring Framework 3.0時,我實現了一個帶有許多Spring功能的小型Web應用程序。 老實說,這比完成這項任務所必需的更多。 這個小型應用程序具有用于單元和集成測試自動化的大量測試代碼。 它具有100%的線路和分支覆蓋率。 一段時間后,我決定基于Java EE 6架構實現完全相同的應用程序以比較這兩種方法。這兩種技術都運行良好,代碼大小幾乎相同,并且具有良好的可維護性。
一個重要的區別是對測試的支持。 Spring Framework對測試提供了出色的支持,而Java EE 6在此存在一些弱點。 對于Java EE 6,您可以使用Embedded Glassfish,但是這種方法煩人(緩慢(嵌入式容器的啟動時間很長))并且配置麻煩。 Spring Framework的另一個突出功能是易于集成舊應用程序。 逐步地更新舊應用程序比較容易,例如,一開始就使用JDBC,事務管理和IoC的一小部分。

結論

  1. 從體系結構的角度來看,Spring和Java EE的模型是競爭者。 取決于組織的策略和約束,兩者都會顯示出優點和缺點。
  2. 通常不建議將兩者結合使用,因為這既浪費EJB容器功能和/或難以維護。 在某些選定的情況下,在Java EE 6應用程序中使用Spring Framework的Building Blocks是有意義的,例如Spring Batch,Data Access。
  3. Spring框架不是標準-它是框架的產品和實現。 這意味著,沒有其他供應商。 請記住這一點。

參考: 輕量級Java企業體系結構– Spring 3 Framework與Java EE 6之間的不公平且不完整的比較,來自我們的JCG合作伙伴 Markus Sprunck,位于Software Engineering Candies博客上。


翻譯自: https://www.javacodegeeks.com/2012/05/spring-3-and-java-ee-6-unfair-and.html

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

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

相關文章

xml配置文件推薦方式

1.XML幫助類 /// <summary>/// Xml幫助類/// </summary>public class XmlHelper{/// <summary>/// 保存xml/// </summary>/// <typeparam name"T"></typeparam>/// <param name"path"></param>/// <p…

AFNetWorking https SSL認證

一般來講如果app用了web service , 我們需要防止數據嗅探來保證數據安全.通常的做法是用ssl來連接以防止數據抓包和嗅探 其實這么做的話還是不夠的 。 我們還需要防止中間人攻擊&#xff08;不明白的自己去百度&#xff09;。攻擊者通過偽造的ssl證書使app連接到了偽裝的假冒的…

查看環境列表_Xfce 4.14桌面環境正式發布,想要圖形界面又想節省內存?就它了...

1. Xfce 4.14桌面環境正式發布&#xff0c;它有什么新特性&#xff1f;本文主要講解Xfce 4.14桌面環境正式發布&#xff0c;它有什么新特性。Xfce已經開發了4年多&#xff0c;但是這個周末終于看到了期待已久的Xfce 4.14的發布。Xfce 4.14是這個輕量級桌面環境的最新穩定版本&a…

使用Log4jdbc記錄JDBC操作

當我們開發任何應用程序&#xff0c;完成它或結束其任何模塊時&#xff0c;我們都會開始優化過程。 大多數應用程序都包含數據庫訪問權限&#xff0c;并且如果您使用的是ORM &#xff0c;則可能會使用hibernate 。 優化休眠持久層&#xff0c;要求準備閱讀&#xff0c;理解和評…

android BluetoothAdapter藍牙BLE掃描總結

做室內定位的程序員應該都知道&#xff0c;在Android 5.0之后&#xff0c;google推出了藍牙掃描新接口&#xff0c;我們在實測中發現出一些問題&#xff0c;現在給大家列出&#xff0c;以供參考&#xff1a; 1.android 4.3.1(Build.VERSION_CODES.JELLY_BEAN_MR2)增加的startLe…

卷積神經網絡語音識別_用于物體識別的3D卷積神經網絡

本文提出了一種基于CNN的3D物體識別方法&#xff0c;能夠從3D圖像表示中識別3D物體&#xff0c;并在比較了不同的體素時的準確性。已有文獻中&#xff0c;3D CNN使用3D點云數據集或者RGBD圖像來構建3D CNNs&#xff0c;但是CNN也可以用于直接識別物體體積表示的體素。本文中&am…

段落排版--對齊(text-aliagn)

想為塊狀元素中的文本、圖片設置居中樣式嗎&#xff1f;可以使用text-align樣式代碼&#xff0c;如下代碼可實現文本居中顯示。(那么什么是塊狀元素呢&#xff1f;后面會講到呢~) h1{text-align:center; } <h1>了不起的蓋茨比</h1> 同樣可以設置居左&#xff1a; h…

Java 7:在不丟失數據的情況下關閉NIO.2文件通道

關閉異步文件通道可能非常困難。 如果您將I / O任務提交到異步通道&#xff0c;則需要確保正確執行了任務。 實際上&#xff0c;出于多種原因&#xff0c;這對于異步通道可能是一個棘手的要求。 默認的通道組使用守護進程線程作為工作線程&#xff0c;這不是一個好選擇&#xf…

JavaScript封裝方法,兼容參數類型為Number和String

/*** 依據Kind確定跳轉到目標列表頁面。* param kind*/function gobackByKind(kind) {var kindStr String(kind);switch(kindStr){case "1"://跳轉到客戶列表頁面window.location.href/biz/customer/list;break;case "2"://跳轉到代理機構列表頁面window.…

#獲得請求來源ip_以太網數據包TCP、IP、ICMP、UDP、ARP協議頭結構詳解

以太網首部目地MAC地址(8字節)源MAC地址(8字節)類型(2字節)1、IP頭的結構版本(4位)頭長度(4位)服務類型(8位)封包總長度(16位)封包標識(16位)標志(3位)片斷偏移地址(13位)存活時間(8位)協議(8位)校驗和(16位)來源IP地址(32位)目的IP地址(32位)選項(可選)填充(可選)數據(1)字節和…

團隊項目第二次沖刺Ⅶ

今天將整體代碼的編碼方式改了&#xff0c;作業模塊基本修改完成 遇到的問題是對于添加問答模塊無從下手轉載于:https://www.cnblogs.com/brucekun/p/5573312.html

編寫Play 2的模塊,第2部分:攔截器

在本教程的第一部分中&#xff0c;我們介紹了創建&#xff0c;發布和調用模塊的基本知識。 我們創建的模塊并沒有真正做很多事情&#xff0c;因此現在是時候使用Play的某些功能來擴展功能了。 1.攔截器 攔截器使您可以攔截對控制器的調用&#xff0c;并增強或阻止其行為。 在第…

c# ef報錯_C# EF調用MySql出現“未將對象引用設置到對象的實例”錯誤解決方案

C# EF調用MySql出現“未將對象引用設置到對象的實例”錯誤解決方案---修改步驟---1.打開Nuget管理包&#xff0c;把Mysql.Data替換為6.10.0以下任意版本。這里選擇的是6.8.82.修改完畢后&#xff0c;繼續把Mysql.Data.Entity也修改為對應版本6.8.8。3.安裝完成后可以看到App.Co…

js格式化時間

Date.prototype.format function(fmt) {var o { "M" : this.getMonth()1, //月份 "d" : this.getDate(), //日 "h" : this.getHours(), //小時 "m" : this.getMinu…

PHP---函數

一.函數定義的四個要素 返回類型&#xff0c;函數名&#xff0c;參數列表&#xff0c;函數體 //1.最簡單的定義方式/*function show(){ echo "hello";}show();*///2.有參數的函數定義/*function show($a){ echo $a;}show("bbbbb");*///3.有默認值的函數定義…

ServletRequest startAsync()的有用性有限

前段時間我遇到了Servlet 3.0中AsyncContext.start&#xff08;…&#xff09;的目的是什么&#xff1f; 題。 引用上述方法的Javadoc &#xff1a; 使容器調度線程&#xff08;可能從托管線程池中&#xff09;運行指定的Runnable 。 提醒大家&#xff0c; AsyncContext是Servl…

mysql所支持的比較運算符_mysql比較運算符有哪些?Mysql比較運算符詳解

比較運算符可用于比較數字和字符串。今天發一篇Mysql比較運算符詳解&#xff0c;希望對初學者有所幫助&#xff0c;雖然現在流行NoSQL&#xff0c;但是MYSQL還是很有用的&#xff0c;數字作為浮點值進行比較&#xff0c;字符串以不區為例進行比較&#xff0c;運算符用于比較表達…

數據結構0類模板的使用

類模板的使用 #include <iostream> #include <conio.h> #include <string> #define N 3 using namespace std;template <class numtype> class Swap{public :Swap(numtype a,numtype b){xa;yb;}numtype ___(){tempx;xy;ytemp;return x;}//testnumtype …

JavaScript 函數

函數 由于JavaScript的函數也是一個對象&#xff0c;所以類似function abs(v){}函數實際上是一個函數對象&#xff0c;而函數名abs可以視為指向該函數的變量。 因此&#xff0c;第二種定義函數的方式如下&#xff1a; var abs function (x) {if (x > 0) {return x;} else {…

Http Invoker的Spring Remoting支持

Spring HTTP Invoker是Java到Java遠程處理的重要解決方案。 該技術使用標準的Java序列化機制通過HTTP公開服務&#xff0c;并且可以被視為替代解決方案&#xff0c;而不是Hessian和Burlap中的自定義序列化。 而且&#xff0c;它僅由Spring提供&#xff0c;因此客戶端和服務器應…