解決Spring2.0向spring2.5遷移的問題
在spring2.0升級到spring2.5時就出問題了,第一個問題就是在更換spring.jar后,啟動項目時,出現java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn 錯誤,其次就是在spring2.5中缺少了一個JAR:spring-mock.jar。我在spring2.5的壓縮包里沒有找到這個JAR,不過發現了mock的一個源碼文件夾。
其實這兩個問題都是spring2.5的jar包里沒有附帶這些類,而是單獨放在其它JAR里,詳細說明如下:
在Spring 2.5中, Spring Web MVC 不再是 'spring.jar' 文件的一部分. Spring MVC以'spring-webmvc.jar' 和'spring-webmvc-portlet.jar'文件形式在發行包的 lib/modules 目錄中存在。 另外,對Struts 1.x的支持被獨立成 'spring-webmvc-struts.jar'。
注意: 經常被使用的Spring的DispatcherServlet也是Spring Web MVC框架的一部分。因此,就算你只是為了遠程訪問(例如,暴露Hessian或者 HTTP調用服務)而使用DispatcherServlet,你也得將'spring-webmvc.jar'(或者 'spring-webmvc-portlet/struts.jar')放到'spring.jar'旁邊去。
Spring 2.5的 'spring-test.jar' 取代了'spring-mock.jar',表達其對test context framework的強烈關注。 注意 'spring-test.jar' 包含了上個版本 'spring-mock.jar'中的一切,因此如果是單元或集成測試,可以直接取代
解決辦法:第一個問題是因為我的系統使用的是Struts1.2,所以還應該加入'spring-webmvc-struts.jar'包就可以了。第二個問題只要加入'spring-test.jar' 包就可以了,應該說,還是比較容易解決的,只要我們了解一下spring2.5與2.0的差別就會知道了。
spring2.0與spring2.5的差別
支持的JDK版本
Spring 2.5對JDK 1.3已經不再支持,因為Sun官方從2006晚期已經正式將JDK 1.3淘汰。請升級到JDK 1.4.2或更高版本。
Spring 2.5的Jar打包
◆在Spring 2.5中, Spring Web MVC 不再是 'spring.jar' 文件的一部分. Spring MVC以'spring-webmvc.jar' 和'spring-webmvc-portlet.jar'文件形式在發行包的 lib/modules 目錄中存在。 另外,對Struts 1.x的支持被獨立成 'spring-webmvc-struts.jar'。
注意: 經常被使用的Spring的DispatcherServlet也是Spring Web MVC框架的一部分。因此,就算你只是為了遠程訪問(例如,暴露Hessian或者 HTTP調用服務)而使用DispatcherServlet,你也得將'spring-webmvc.jar'(或者 'spring-webmvc-portlet/struts.jar')放到'spring.jar'旁邊去。
◆Spring 2.0的 'spring-jmx.jar' 和 'spring-remoting.jar'已經被轉移到 Spring 2.5的'spring-context.jar' (針對 JMX 和非HTTP 遠程支持),部分轉移到 'spring-web.jar' (針對HTTP 遠程支持)。
◆Spring 2.0 的 'spring-support.jar' 被改名為 'spring-context-support.jar', 更好的表達其真實含義。 'spring-portlet.jar' 被改名為 'spring-webmvc-portlet.jar',表明它是Spring Web MVC framework的子模塊之一。 類似的, 'spring-struts.jar' 被改為'spring-webmvc-struts.jar'。
◆Spring 2.0的'spring-jdo.jar', 'spring-jpa.jar', 'spring-hibernate3.jar', 'spring-toplink.jar' 和 'spring-ibatis.jar' 被合并到Spring 2.5大粒度的'spring-orm.jar'中。
◆Spring 2.5的 'spring-test.jar' 取代了'spring-mock.jar',表達其對test context framework的強烈關注。 注意 'spring-test.jar' 包含了上個版本 'spring-mock.jar'中的一切,因此如果是單元或集成測試,可以直接取代。
◆ Spring 2.5的 'spring-tx.jar' 取代了 'spring-dao.jar' 和'spring-jca.jar' 文件,表達其對transaction framework的強烈關注。
◆Spring 2.5 將其jar文件直接作為OSGi兼容的bundle。這使得在OSGi環境中使用Spring 更加方便,不再需要定制打包了。
XML配置
Spring 2.0的XSD在描述Spring XML元數據格式方面比先前的DTD更豐富。 舊的DTD仍然得到支持,但如果可能我們鼓勵在bean定義文件頭部引用XSD文件。
有一點被改變了,那就是定義bean作用域的方式。如果你使用的是Spring 1.2 DTD,那么你能繼續用'singleton'屬性。 如果你選擇引用新的Spring 2.0 DTD,它不允許使用'singleton'屬性, 那么可以用'scope'屬性來定義bean的生命周期作用域。
Deprecated(淘汰)的類和方法
一些以前被標記為@deprecated的類和方法Spring 2.0代碼庫中被完全刪除了。 Spring團隊決定把2.0版本作為一個新的開始,那些被deprecated的代碼應該被除去而不是在可預見的未來繼續在代碼中出現。
下面的類/接口已經從Spring 2.0的代碼中刪除了:
ResultReader : 使用RowMapper接口代替。
BeanFactoryBootstrap : 考慮使用一個BeanFactoryLocator 或是自定義引導類代替
Apache OJB
Spring 2.0開始,請注意Spring主代碼中的Apache OJB支持被完全刪除了; 但仍然可以在Spring Modules項目中找到Apache OJB的集成庫。
iBATIS
請注意iBATIS SQL Maps 1.3支持被完全去除了。如果你還在使用iBATIS SQL Maps 1.3, 請升級到iBATIS SQL Maps 2.0/2.1。
Hibernate
Spring 2.5中,對 Hibernate 2.1 和 Hibernate 3.0 的支持已經去除。請升級到Hibernate 3.1或更高版本。
如果你需要繼續使用Hibernate 2.1或3.0,我們建議你繼續使用Spring 2.0.7/2.0.8,這些版本仍然支持Hibernate的那些版本。
JDO
Spring 2.5中,對JDO 1.0 的支持被去除。請升級到JDO 2.0或更高版本。
如果你需要繼續使用JDO 1.0,我們建議你繼續使用spring 2.0.7/2.0.8,這些版本仍然支持JDO 1.0。
UrlFilenameViewController
從Spring 2.0起,UrlFilenameViewController所決定的view名字現在考慮了request中的嵌套路徑。這是對原始 UrlFilenameViewController約定的重大修改,意味著如果你從Spring 1.x升級到Spring 2.x,并且你在使用這個類,你可能必須小小的修改你的Spring Web MVC配置。請參考UrlFilenameViewController 的類Javadoc,來查看新的view name determination的約定的示例。
【編輯推薦】