亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

POJO應用框架:Spring與EJB3.0的比較

2019-11-18 12:33:04
字體:
來源:轉載
供稿:網友

  艾伯特.愛因斯坦曾經說過:“一切都應該盡可能地簡單,但是不能更簡單?!贝_實如此,簡化一門理論的基本假設,使我們可以專注于真正要害的地方,這正是一直以來對科學真理的追求。企業軟件開發同樣如此。
  
  提供一個將復雜的事物(例如,事務、安全或持久性)對開發者進行隱藏的應用框架是簡化企業軟件開發的要害。一個設計良好的框架可以提高代碼重用率、開發者的生產力及軟件的質量。然而,現有J2EE1.4的EJB2.1框架被普遍認為設計差,且過于復雜。不滿于EJB2.1的框架結構,java開發者嘗試了各種各樣的中間件服務傳遞方法。最引人注目的是,以下兩個框架引起了開發者極大愛好并得到了大量正面的反饋。他們以未來企業Java應用所選框架的姿態展現。
  
  SPRing框架雖然很流行但并不是一個標準的開源框架。它主要由Interface21 Inc開發和控制。Spring框架結構是基于依靠注入(Dependency Injection (DI))的設計模式。它可以獨立或在現有的應用服務器上運行,而且大量地使用了xml配置文件
  
  EJB3.0是由Java Community Process (JCP)制訂的標準框架,為所有主要的J2EE廠商支持。JBoss已經提供了試用版EJB3.0標準的開源或商業性質實現。EJB3.0充分利用了Java的注釋
  
  這兩個框架結構都有一個共同核心設計理念:將中間件服務傳遞給耦合松散的POJOS (Plain Old Java Objects, 簡單潔凈Java對象)。 這樣的框架利用截取執行上下文或在運行時將服務對象注入POJO來把應用服務“纏繞”到POJO。POJO本身并不關心這種“纏繞”,對這種框架結構也沒有什么依靠。因此,開發者可專注于業務邏輯和脫離框架的POJO單元測試。除此之外, 由于POJO并不須要繼續框架的類或實現其接口,開發者能夠極其靈活地搭建繼續結構和建造應用。
  
  然而,在擁有同一理念的同時,兩個框架結構使用不同的方式來傳遞POJO服務。許多書籍或文章都將Spring 或EJB3.0和EJB2.1做了比較,但是對Spring 和EJB3.0的比較并沒有仔細研究過。在本文中,我將對Srping和EJB3.0框架背后的要害不同處進行考察,并討論其優缺點。本文的觀點也適用于其它更少為人知的框架,因為他們都是對“耦合松散的POJO”的設計。希望這篇文章可以幫助你選擇適合你需求的最好框架。
  
  廠商無關性
  
  開發者選擇Java平臺其中最引人注目的理由之一:廠商無關性。EJB3.0正是一套設計為廠商無關的開放性標準。EJB3.0標準為所有企業Java社團里開源或商業性質廠商所開發和支持。它將開發者與應用服務器實現完全隔離。例如,JBoss的 EJB3.0實現基于Hibernate,Oracle的基于TopLink,但是開發者并不須要學習Hibernate- 或TopLink的具體API來使應用可在Jboss或Oracle上運行。廠商無關性使EJB3.0與現今其它POJO中間件框架區別開來。
  
  但是,正如許多EJB3.0評論家迅速所指出的,在本文撰寫時EJB3.0標準還沒有到達一個最終版本。大概還有一到兩年的時間EJB3.0才能廣泛地為所有主要J2EE廠商所支持。即使你的應用服務器本身不支持EJB3.0,你仍然可以通過下載安裝”內嵌的”EJB3.0產品來運行EJB3.0的應用。例如,JBoss的內嵌EjB3.0是開源產品且可以在任何J2SE5.0兼容的環境運行(例如, 在任何Java服務器上),此產品正處于軟件測試階段。其它廠商不久也將發布自己的內嵌EJB3.0產品,非凡是針對標準中關于數據持久性的部分。
  
  另一方面,Spring一直以來都是非標準的技術,在未來可預知的一段時間內這種情況將持續下去。雖然你可以在任何應用服務器上使用Spring框架,Spring應用會被鎖入在Spring本身和你選擇整合進Spring的具體服務中。
  
  Spring框架是一個開源項目,但同時它有一個XML格式的配置文件和編程接口。當然任何一個非標準的產品都會有這種“鎖入”(lock-in)的情況,并不是Spring特有的。但Spring應用的長期生存能力仍然還得托Spring這個項目的福(或者是Interface21公司,它雇傭了大部分Spring核心開發人員)。除此之外,假如你用到任何一個具體的Spring服務,例如,Spring事務治理器或則Spring MVC,你也會被鎖入到這些API里。
  
  Spring的應用對終端用戶是不可知的。例如,對數據持久服務,Spring框架兼容不同的DAO和JDBC的模版幫助類,如Hibernate, iBatis, 和 JDO。所以假如你需要為spring應用切換在數據持久化服務(例如從JBDC到Hibernate),你需要修改你的代碼以適合新的模版幫助類。
  
  服務整合
  
  從一個很高的角度上看,Spring框架處于應用服務器和服務庫的上方。服務整合的代碼(如,數據訪問模板和幫助類)屬于框架,并暴露于應用開發者。相反,EJB3.0框架與應用服務器高度整合,服務整合代碼也包裝在一個標準接口后面。
  
  因此,實現EJB3.0的廠商可以大大地優化整體性能和提升開發者的體驗。例如,在JBoss EJB3.0的實現中,當你在用EntityManager持久化一個Entity Bean時,后臺的Hibernate會話事務已經自動地幫定到調用方法的JTA 的事務上,在JTA 事務提交的同時Hibernate會話事務也提交了。你甚至可以使用一個簡單的 @PersistenceContext 注釋(稍候例子演示)將EntityManager和它后臺的Hibernate事務綁定到一個stateful session bean的應用事務中。在一個會話中應用事務橫跨多個線程,這在事務性網頁應用很有用,例如,多頁面的購物車。
  
  由于高度整合的EJB3.0的框架,使簡單、集成的編程接口成為可能。Oracle EJB3.0框架和其后臺的Toplink持久化服務也同樣程度地整合。
  
  另一個EJB3.0整合服務的絕好例子就是集群支持。假如你在一個服務器集群上部署了一個EJB3.0的應用,所有容錯(fail-over)、負載均衡、分布式緩沖和狀態復制都已經自動為應用所獲得可用。后臺的集群支持被隱藏在EJB3.0的框架后面,對EJB3.0開發者來說這些都是完全透明不可見的。
  
  在Spring里,很難優化框架和服務之間的通訊。例如,為了使用Spring里的聲明事務服務來治理Hibernate事務,你必須顯示地在XML文件中配置Spring TransactionManager和Hibernate SessionFactory對象。Spring必須電顯示地治理橫跨多個HTTP請求的事務。除此之外,沒有別的方法均衡Spring應用里的集群。
  
  服務組合的彈性
  
  由于Spring的服務整合代碼作為編程接口的一部份暴露在外,應用開發者有按自己需求裝配服務的彈性。這個特點使你能夠組合自己的輕量級應用服務器。Spring的一個普遍用法就是將Tomcat和Hibernate組合在一起支持數據庫驅動的web應用。在這種情況,Spring本身提供事務服務,Hibernat提供持久化服務——這種設置創建了一個袖珍型的應用服務器。
  
  EJB3.0應用服務器典型地不提供這種根據需求任你挑撿服務的彈性空間。大多數時間,你得到的只是一系列包裝好的特性,其中一些你可能根本就不需要。但是假如應用服務器像JBoss一樣提供一個模塊性的內部設計,那么你可以只取其中一部分,而把不必要的部分剝去。在任何情況,去自定義一個功能強大的應用服務器是沒有什么價值的。
  
  當然,假如應用已經超過單個點,那么你應該加入常用服務器上的服務,例如,資源池(resource pooling),消息隊列(message queuing)和集群(clustering)。就總體的資源消耗而言,Spring解決方法和其他EJB3.0解決方法一樣是重量級的。
  
  在Spring框架里,具有彈性的服務裝配使得將虛擬對象而不是真正的業務對象綁定到應用中做脫離容器的單元測試更簡單。在EJB3.0應用中,大多數組件都是簡單POJO,他們可以很輕易地在容器外被測試。但是對于與容器服務相關的對象(例如持久化實實體治理器EntityManager)建議用容器內測試。因為這樣會比虛擬對象測試方法更簡單,強壯及準確。
  
  XML Vs.注解
  
  從應用開發者的觀點上來看,Spring的編程開發接口主要基于XML配置文件而EJB3.0廣泛地應用Java注解。XML可以表達復雜的關系,但是它也冗長且不夠健壯;注解簡單明了,但是很難在注解里表達復雜或繼續性的關系。
  
  Spring選擇XML或EJB3.0選擇注解都是有他們兩者框架后的體系結構決定的。因為注解只能容納很少的配置信息,只有整合前的框架(重頭戲都在框架里)才可以把廣泛地使用注解作為配置選擇。正如我們所討論過的,EJB3.0剛好符合這個要求,而Spring作為一個普通的DI框架并不符合。
  
  當然,EJB3.0和Spring都相互取長補短,在某種程度上他們都支持XML和注解。例如,在EJB3.0中,XML配置文件作為一個可選的重載機制來改變注解的默認行為。注解也可以配置一些Spring服務。
  
  通過例子是學習XML和注解方式之間差異的最好方法。在下面幾個環節里,讓我們來看看Spring和EJB3.0是怎樣提供要害服務給應用的。
  
  聲明性服務
  
  Spring和EJB3.0都將運行時服務(例如,事務、安全、日志和配置服務)綁定到應用。因為這些服務于應用的業務邏輯是沒有直接聯系,他們只是由應用本身治理。換句話說,這些服務在運行時由容器透明地應用到應用中。開發者或是治理者配置容器,準確地告訴它什么時候怎樣應用這些服務。
  
  EJB3.0運用Java注解來配置聲明性服務,而Sring使用XML配置文件。在大多數情況下,EJB3.0注解方式對于這種服務更簡單明了。這里有一個在EJB3.0中將事務服務運用到POJO的例子。
  
  public class Foo {    @TransactionAttribute(TransactionAttributeType.REQUIRED)  public bar () {   // do something ...  }  }
  
  你也可以為一個代碼段聲明多個屬性,應用多個服務。這是一個在EJB3.0里同時應用事務和安全服務到POJO的例子。
  
  @SecurityDomain("other")public class Foo {    @RolesAllowed({"managers"})  @Tran

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美黄色片免费观看| 亚洲精品v天堂中文字幕| 欧美精品少妇videofree| 一区二区福利视频| 亚洲综合中文字幕在线观看| 成人观看高清在线观看免费| 欧美视频不卡中文| 国产亚洲精品日韩| 欧美日韩国产在线| 国产精品视频不卡| 欧美日韩视频免费播放| 97在线视频观看| 欧美日韩ab片| 国产日韩在线精品av| 美日韩丰满少妇在线观看| 亚洲三级黄色在线观看| 国产成人午夜视频网址| 成人疯狂猛交xxx| 亚洲成人黄色网| 国产精品中文字幕在线| 91大神福利视频在线| 国产精品99免视看9| 欧美电影院免费观看| 久久精品中文字幕免费mv| 日韩精品极品视频免费观看| 国产成人在线一区二区| 亚洲2020天天堂在线观看| 欧美亚洲午夜视频在线观看| 97精品国产aⅴ7777| 日韩电视剧在线观看免费网站| 午夜精品一区二区三区视频免费看| 久久精视频免费在线久久完整在线看| 国产精品日韩欧美大师| 中文字幕一区二区三区电影| 综合av色偷偷网| 在线免费观看羞羞视频一区二区| 久久香蕉频线观| 日韩av电影手机在线观看| 亚洲毛茸茸少妇高潮呻吟| 日本人成精品视频在线| 国内精品400部情侣激情| 久久久久久久久综合| 国产精品男人的天堂| 国产欧美日韩精品丝袜高跟鞋| 国产精品盗摄久久久| 久久久久久久久久久网站| 亚洲人成网在线播放| 国产视频精品免费播放| 国产69久久精品成人| 欧美第一黄网免费网站| 久久精品中文字幕免费mv| 在线观看国产成人av片| 久久99国产精品自在自在app| 亚洲一级一级97网| 国产在线精品自拍| 亚洲人成77777在线观看网| 国产精品久久久久久超碰| 久久久久久久一区二区| 久久久久一本一区二区青青蜜月| 日韩av免费网站| 欧美精品久久久久久久久| 久久久成人av| 亚洲欧美综合图区| 亚洲精品成人久久电影| 亚洲男人天天操| 黑人巨大精品欧美一区二区一视频| 日韩电影免费在线观看中文字幕| www国产精品com| 欧美激情视频在线免费观看 欧美视频免费一| 久久亚洲国产精品| 久久久免费高清电视剧观看| 福利视频一区二区| 亚洲精品xxxx| 成人黄色影片在线| 国产精品扒开腿做爽爽爽的视频| 国产精品69久久| 91国产视频在线| 欧美日韩在线第一页| 亚洲男人天堂2023| 91亚洲永久免费精品| 九九热这里只有精品6| 18久久久久久| 国产成人精品免费视频| 亚洲国产另类 国产精品国产免费| 国产成人综合av| 亚洲国产精品视频在线观看| 欧美精品在线观看| 亚洲另类激情图| 欧美日韩国产一区中文午夜| 久久久久久国产精品| 亚洲成在人线av| 91精品久久久久久久久久久久久| 在线观看中文字幕亚洲| 国产精品白嫩初高中害羞小美女| 日韩激情av在线免费观看| 久久精品青青大伊人av| 欧美大成色www永久网站婷| 欧美xxxx18性欧美| 国产欧美日韩高清| 国产精品成人久久久久| 欧洲精品毛片网站| 久久青草福利网站| 日韩在线精品视频| 亚洲精品国产精品国自产观看浪潮| 911国产网站尤物在线观看| 久久国产精品久久久久久| 日韩欧美国产成人| 亚洲美女在线看| 国产精品久久久久久中文字| 欧美在线亚洲一区| 久久久成人精品视频| 在线观看欧美www| 91精品国产91久久久久久| 最近2019中文字幕大全第二页| 欧美性视频精品| 国产精品美乳一区二区免费| 国产精品2018| 51ⅴ精品国产91久久久久久| 亚洲男人天堂手机在线| 88国产精品欧美一区二区三区| 国模精品一区二区三区色天香| 亚洲精品福利免费在线观看| 国内外成人免费激情在线视频网站| 亚洲免费高清视频| 国产精品久久av| 日韩中文字幕不卡视频| 国产69精品99久久久久久宅男| 国产精品成久久久久三级| 欧美福利视频网站| 欧美精品免费播放| 欧美成人激情视频| 一区二区三区国产视频| 高跟丝袜一区二区三区| 尤物精品国产第一福利三区| 亚洲人成在线一二| 欧美wwwwww| 亚洲女人天堂网| 欧美成人激情图片网| 久久久久国产一区二区三区| 久久久av亚洲男天堂| 国产免费一区二区三区在线能观看| 中文字幕精品—区二区| 久久精品国产欧美亚洲人人爽| 亚洲曰本av电影| 午夜精品久久久久久久久久久久久| 国产成人精品999| 亚洲黄一区二区| 欧美性极品少妇精品网站| 91精品免费看| 影音先锋欧美在线资源| 欧美日韩午夜视频在线观看| 91在线视频一区| 国产视频精品免费播放| 欧美重口另类videos人妖| 国内精品久久久久| 精品一区二区三区电影| 国产精品美女久久| 欧美中文在线视频| 欧美另类极品videosbest最新版本| 精品国产一区二区三区在线观看| 欧美日韩国产中文精品字幕自在自线| 91精品国产91久久久久久最新| 亚洲免费伊人电影在线观看av| 久久久久久久久爱|