突然間想知道spring2.0到2.5 再到3.0的變化,就到網上搜索一下。方便查看而已
2.5的新特性
Spring2.5rc1發佈了,一直想知道它葫蘆裏賣什麼藥,如下是文檔裏的change.log
- 1. JDK版本: JDK至少要1.4.2以上,若是仍然打算使用1.3的話就請用2.0.6/2.0.7版本吧。
- 2. Jar包:SpringMVC 再也不使用spring.jar 這個龐大的包了。 Spring-webmvc.jar, spring-webmvc-portlet.jar 能夠在 lib/modules 目錄下找到,並且對於Struts1.* 的支持的包也應該改爲 spring-webmvc-struts.jar了。
- 3. XML配置:推薦使用XML metadata格式,不過先前的DTD仍然支持。須要注意的一點是,Spring1.2的DTD繼續使用「singleton」屬性,可是新的Spring2.0 DTD不容許使用「singleton」屬性了,改爲「scope」屬性來描述bean的生命週期。
- 4. 廢棄的類與方法:有些在先前版本標註過「@deprecated」的類與方法已經徹底被廢棄了。
- 好比:
- ResultReader : 被 RowMapper 接口取代。
- BeanFactoryBootstrap : 考慮使用 BeanFactoryLocator 或自定義的bootstrap類來代替。
- 5. Apache OJB:注意Spring源代碼中已經徹底把這個去掉了,但與之整合的類仍然能夠在Spring Modules project找到。https://springmodules.dev.java.net/
- 6. iBATIS:注意Spring已經再也不支持iBATIS 的1.3版本了, 若是想繼續的話,請升級到2.3以上吧。
- 7. Hibernate:注意Spring已經再也不支持Hibernate 3.1以前的版本了,也就是說2.1,3.0的版本也沒法使用了。若是仍然要用的話,推薦使用Spring的2.0.6/2.0.7版本。
- 8. JDO:注意Spring已經不支持JDO1.0了。一樣,你能夠升級到2.0以上版本,或者使用Spring的2.0.6/2.0.7版本。
- 9. UrlFilenameViewController :這個東東我也沒有接觸過,這裏,我就簡單翻譯一下吧。
- 「考慮到嵌套路徑的請求,視圖名稱如今決定叫UrlFilenameViewController了,這是一個突破性的改變,而且意味着若是你從Spring1.* 升級到Spring2.0 你可使用該類從而減小Spring Web MVC的配置工做。」
你們在使用新版本以前請先注意這些改變,也許對您的系統來講,是很重要的。
spring3.0特性
1、首先,模塊的組織更加的細緻,從那麼多的jar分包就看的出來:
Spring的構建系統以及依賴管理使用的是Apache Ivy,從源碼包看出,也使用了Maven。
Maven確實是個好東西,好處再也不多言,之後但願能進一步用好它。
2、新特性以下:
Spring Expression Language (Spring表達式語言)
IoC enhancements/Java based bean metadata (Ioc加強/基於Java的bean元數據)
General-purpose type conversion system and UI field formatting system (通用類型轉換系統和UI字段格式化系統)
Object to XML mapping functionality (OXM) moved from Spring Web Services project (對象到XML映射功能從Spring Web Services項目移出)
Comprehensive REST support (普遍的REST支持)
@MVC additions (@MVC加強)
Declarative model validation (聲明式模型驗證)
Early support for Java EE 6 (提早對Java EE6提供支持)
Embedded database support (嵌入式數據庫的支持)
3、針對Java 5的核心API升級
- 一、BeanFactory接口儘量返回明確的bean實例,例如:
-
- T getBean(String name, Class requiredType)
-
- Map getBeansOfType(Class type)
-
- Spring3對泛型的支持,又進了一步。我的建議泛型應該多用,有百利而無一害!
-
- 二、Spring的TaskExecutor接口如今繼承自java.util.concurrent.Executor:
-
- 擴展的子接口AsyncTaskExecutor支持標準的具備返回結果Futures的Callables。
-
- 任務計劃,我的仍是更喜歡Quartz。
-
- 三、新的基於Java5的API和SPI轉換器
無狀態的ConversionService 和 Converters
取代標準的JDK PropertyEditors
類型化的ApplicationListener,這是一個實現「觀察者設計模式」使用的事件監聽器。
基於事件的編程模式,好處多多,在項目中應該考慮使用,基於事件、狀態遷移的設計思路,有助於理清軟件流程,和減小項目的耦合度。
4、Spring表達式語言
Spring表達式語言是一種從語法上和統一表達式語言(Unified EL)相相似的語言,但提供更多的重要功能。它能夠在基於XML配置文件和基於註解的bean配置中使用,並做爲基礎爲跨Spring portfolio平臺使用表達式語言提供支持。
接下來,是一個表達式語言如何用於配置一個數據庫安裝中的屬性的示例:
value="#{systemProperties.databaseName}"/>
value="#{strategyBean.databaseKeyGenerator}"/>
若是你更願意使用註解來配置你的組件,那麼這種功能一樣可用:
@Repository public class RewardsTestDatabase {
@Value("#{systemProperties.databaseName}")
public void setDatabaseName(String dbName) { … }
@Value("#{strategyBean.databaseKeyGenerator}")
public voidsetKeyGenerator(KeyGenerator kg) { … }
}
又多一種表達式語言,造輪子的運動還在繼續中!
5、基於Java的bean元數據
JavaConfig項目中的一些核心特性已經集成到了Spring中來,這意味着以下這些特性如今已經可用了:
@Configuration
@Bean
@DependsOn
@Primary
@Lazy
@Import
@Value
又來一堆的註解,無語了,感受仍是配置文件方便!:(
這兒有一個例子,關於一個Java類如何使用新的JavaConfig特性提供基礎的配置信息:
package org.example.config;
@Configuration
public class AppConfig {
private @Value("#{jdbcProperties.url}") String jdbcUrl;
private @Value("#{jdbcProperties.username}") String username;
private @Value("#{jdbcProperties.password}") String password;
@Bean
public FooService fooService() {
return new FooServiceImpl(fooRepository());
}
@Bean
public FooRepository fooRepository() {
return new HibernateFooRepository(sessionFactory());
}
@Bean
public SessionFactory sessionFactory() {
// wire up a session factory
AnnotationSessionFactoryBean asFactoryBean =
new AnnotationSessionFactoryBean();
asFactoryBean.setDataSource(dataSource());
// additional config
return asFactoryBean.getObject();
}
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource(jdbcUrl, username, password);
}
}
爲了讓這段代碼開始生效,咱們須要添加以下組件掃描入口到最小化的應用程序上下文配置文件中:
6、在組件中定義bean的元數據
感受Spring提供了愈來愈多的註解、元數據,複雜性已經超出了當初帶來的方便自己!
7、通用類型轉換系統和UI字段格式化系統
Spring3加入了一個通用的類型轉換系統,目前它被SpEL用做類型轉換,而且可能被一個Spring容器使用,用於當綁定bean的屬性值的時候進行類型轉換。
另外,還增長了一個UI字段格式化系統,它提供了更簡單的使用而且更強大的功能以替代UI環境下的JavaBean的PropertyEditors,例如在SpringMVC中。
這個特性要好好研究下,通用類型轉換系統若是果如所言的話,帶來的好處仍是不少的。
8、數據層
對象到XML的映射功能已經從Spring Web Services項目移到了Spring框架核心中。它位於org.springframework.oxm包中。
OXM?研究下!時間真不夠!
9、Web層
在Web層最激動人心的新特性莫過於新增的對構件REST風格的web服務和web應用的支持!另外,還新增長了一些任何web應用均可以使用的新的註解。
服務端對於REST風格的支持,是經過擴展既有的註解驅動的MVC web框架實現的。
客戶端的支持則是RestTemplate類提供的。
不管服務端仍是客戶端REST功能,都是使用HttpConverter來簡化對HTTP請求和應答過程當中的對象到表現層的轉換過程。
MarshallingHttpMessageConverter使用了上面提到的「對象到XML的映射機制」。
10、@MVC加強
新增了諸如@CookieValue 和 @RequestHeaders這樣的註解等。
11、聲明式模型驗證
支持JSR 303,使用Hibernate Validator做爲實現。
12、提早對Java EE6提供支持
提供了使用@Async註解對於異步方法調用的支持(或者EJB 3.1裏的 @Asynchronous)
另外,新增對JSR 303, JSF 2.0, JPA 2.0等的支持。
十3、嵌入式數據庫的支持
對於嵌入式的Java數據庫引擎提供了普遍而方便的支持,諸如HSQL, H2, 以及Derby等。
這是否是表明一種潮流呢?數據庫向愈來愈小型化發展,甚至小型化到嵌入式了,我認爲這在桌面級應用上仍是頗有市場的。
已有 0 人發表留言,猛擊->>這裏<<-參與討論
JavaEye推薦