作者: 汪翔 出處:軟體世界
更新時間:2007-10-22 15:33
關 鍵 詞:EJB 3.0 Spring Web 開源 Java
閱讀提示:本文比較了EJB 3.0和Spring在傳遞POJO服務時採用的不同方法,供大家參考!
EJB 3.0和Spring在傳遞POJO服務時採用了完全不同的方法,這使得開發人員在實施POJO時不得不進行艱難的選擇。
對於POJO的開發,存在著兩種架構EJB 3.0和Spring,這兩個架構組件的核心設計理念是相同的:把中介軟體服務傳遞給鬆散耦合的簡單舊式Java對象(POJO)。這些架構組件通過在運行 時截取執行內容或向POJO注入服務物件,把應用程式服務與POJO捆綁在一起。POJO本身不關心捆綁的過程,並且對架構組件幾乎沒有依賴。其結果是, 開發人員可以聚焦於商務邏輯,個人可以在沒有架構組件的情況下測試他們的POJO。此外,由於POJO不需要從架構組件中繼承或實現架構組件介面,開發人員建 立繼承結構和構建應用程式的時候都有高度的靈活性。
但是,儘管兩者的設計理念是相同的,它們傳遞POJO服務時卻採用了完全不同的方法。
注入方式
Spring仍然是依賴XML來注入到POJO的,XML寫起來比較麻煩,雖然流行的IDE都有圖形化的編輯介面,但還是很難操作,同時 Spring使用XML來說明配置聲明性服務,也會產生一個冗長的設定檔。這些設定檔必須在運行時才能知道其中的錯誤,哪怕是一個大小寫問題。因此 Spring目前也在考慮如何簡化XML設定檔。
EJB 3.0使用Annotation,這要比Spring簡單明了,但其功能也受到一定的限制。Spring基於XML配置的依賴注入文法複雜,但功能卻非常強大。可以將任何一個POJO注入到另一個POJO,包括應用程式中自訂的那些POJO。
鬆散耦合度與服務整合
Spring與應用伺服器採取鬆散耦合,作為Spring設計的核心理念,這樣增強了Spring的靈活性,但同時也增加了開發的複雜度,因為如此 一來,開發人員就必須弄清楚Spring對應的應用伺服器的。而事實上,這些與應用伺服器的關聯代碼對於開發人員大都是不必要的,開發人員往往只需要關係業務邏 輯就可以了。使用Spring的聲明式事務服務來管理Hibernate事務,必須在XML設定檔中明確的配置Spring的交易管理員 (TransactionManager)和Hibernate SessionFactory對象。
EJB3.0架構與應用伺服器結合較緊密,服務被整合封裝,隱藏在EJB介面後面。因為EJB3.0本身就是J2EE標準的一部份,因此,它與其他J2EE服務如JCA,JMX都結合的很好。而缺點也正是結合太緊密,不夠靈活。
對Web架構的支援度
Spring在這方面要優於EJB3.0,幾乎所有開源項目都有這個特性——對現有的流行支援人員度都非常好。Spring可以靈活地整合各種 Web架構和範本語言,另外自身也提供了相當強大的Spring-MVC架構,而且可以很好的結合spring webflow,webwork,struts等。同時隨著Spring Web Services 1.0正式公布,Spring對web service開發明顯增強了,這無疑使Spring愛好者開發人員更加熱衷於Spring。
EJB3.0標準整合JSF,但JSF目前並不成熟,也沒有得到預期的效果。同時EJB3.0對其他web架構支援也比較差。
開源與標準規範
Spring架構是開源項目,但不是標準的。Spring的介面設定檔描述都是私人的。雖然,Rona 聲稱Spring完全支援可以不使用Spring的特殊專有服務,但是實際情況往往不是這樣的。因此,一旦使用了Spring的特殊服務,那麼就綁定到了 Spring架構上了。例如,如果使用它的管理服務,則必須使用相應的Spring私人的API。而且,Spring的發展完全依賴於Spring開源項 目,這使得它的支援力度也不夠。
EJB3.0是完全公開的規範標準,它本身是J2EE標準的一部分,因此得到了很多廠商的支援。例如,JBoss在EJB3.0剛出來時,就宣布其 新的版本支援EJB3.0的伺服器。這樣基於EJB3.0的程式就可以比較輕鬆地在WebSphere、WebLogic以及JBoss之間進行切換(除 非使用了應用伺服器提供的專有組件)。