Spring 3.0新增特性與功能前瞻
51CTO之前曾報道過Spring 3.0即將發布的消息,大家對Spring的新版期盼已經,畢竟Spring 2.0,發布于2006年10月,Spring 2.5,發布于2007年11月;如果你使用Srping進行項目開發,肯定對目前Srping的功能能否滿足你想買的需求提出過質疑,并期望某些功能可以在Spring 3.0版得到改進和支持.下面我們來看看Spring 3.0版的一些新增功能和特性.
Java SE與Java EE支持
現在的Spring Framework基于Java 5,并且完全支持Java 6。而且,它兼容J2EE 1.4及Java EE 5,同時還引入了一些對Java EE 6的早期支持。
1、Java 5
為了利用Java 5特性,例如泛型、可變參數和其他語言改進,整個框架的代碼都被修改過了。我們盡可能地保證代碼能夠向后兼容。我們現在一致使用的泛型Collection和Map,一致使用泛型FactoryBean,并且在Spring AOP API中有一致的橋接方法解析。泛型ApplicationListener只會自動接收特定的事件類型。所有的回調接口,例如TransactionCallback和HibernateCallback,可以聲明泛型結果值了。總而言之,Spring的核心代碼經過了徹底的修改,并為Java 5做了優化。
為了與Java 5的java.util.concurrent機制緊密結合,Spring的TaskExecutor抽象也被修改過了。我們為Callable和Future提供了***的支持,還有ExecutorService適配器、ThreadFactory集成等等。這些特性都盡可能與JSR-236(Concurrency Utilities for Java EE 6)保持一致。此外,針對通過新的@Async注解(或者EJB 3.1的@Asynchronous注解)進行異步方法調用,我們也提供了相應的支持。
2、改進的文檔
Spring的參考文檔也不斷被更新著,這樣它才能完整地反映Spring 3.0的變化和新特性。盡管我們進了一切努力不在文檔中犯錯,但還是有些漏網之魚。如果你發現了一些拼寫錯誤或者更嚴重的錯誤,并能在午餐時擠出點時間的話,請將這些錯誤告訴Spring團隊,提個事件 就可以了。
3、新的入門教程
現在有了一份新的開發基礎Spring 3.0 MVC Web應用程序的教程。這個教程是一份獨立的文檔,你能在Spring Documentation 頁面中找到它。
注意:要到Spring 3.0正式發布時才能獲得該文檔。
4、新的模塊組織結構和構建系統
我們修改了框架的模塊,并用每個模塊jar一棵源碼樹的方式分別進行管理:
• org.springframework.aop
• org.springframework.beans
• org.springframework.context
• org.springframework.context.support
• org.springframework.expression
• org.springframework.instrument
從Spring Web Flow 2.0開始,我們使用了新的Spring構建系統。這給了我們:
◆基于Ivy的“Spring Build”系統
◆一致的部署過程
◆一致的依賴管理方式
◆一致的OSGi Manifest生成方式
5、新特性概述
以下是Spring 3.0新特性的列表,我們稍后會更詳細地介紹它們。
◆Spring Expression Language
◆IoC增強 / 基于Java的Bean元數據
◆從Spring Web Services遷移過來的對象 / XML映射功能(OXM)
◆全面的REST支持
◆更多@MVC注解
◆聲明式模型驗證
◆Java EE 6早期支持
◆嵌入式數據庫支持#p#
針對Java 5的核心API更新
BeanFactory接口會盡可能地返回確定類型的Bean實例:
◆T getBean(String name, Class
◆Map
Spring的TaskExecutor接口現在擴展了java.util.concurrent.Executor接口:
擴展了的AsyncTaskExecutor支持帶Future的標準Callable
新的基于Java 5的轉換器API和SPI:
◆無狀態的ConversionService和Converter
◆取代標準JDK PropertyEditor
指定類型的ApplicationListener
Spring Expression Language
Spring引入了一種表達式語言,它在語法上很像Unified EL,但提供了更多功能。在定義XML和基于注解的Bean定義的時候,可以使用該表達式語言,此外,它也是Spring Portfolio中表達式語言支持的基礎。該功能的詳細信息請參考Spring Expression Language(SpEL)一章。
Spring Expression Language為Spring社區提供了一種能在所有Spring Portfolio產品中使用的、有良好支持的表達式語言。它的語言特性是由Spring Portfolio中項目的需求來驅動的,其中也包含工具的需求,例如,在基于Eclipse的SpringSource Tool Suite中的代碼補全支持。
下面是一個例子,演示了如何用它來配置數據庫屬性。
- <bean class="mycompany.RewardsTestDatabase">
- <property name="databaseName"
- value="#{systemProperties.databaseName}"/>
- <property name="keyGenerator"
- value="#{strategyBean.databaseKeyGenerator}"/>
- < SPAN>bean>
如果你更喜歡用注解來配置你的組件,該功能也同樣適用:
- @Repository
- public class RewardsTestDatabase {
- @Value("#{systemProperties.databaseName}")
- public void setDatabaseName(String dbName) { … }
- @Value("#{strategyBean.databaseKeyGenerator}")
- public voidsetKeyGenerator(KeyGenerator kg) { … }
- }
控制反轉(Inversion of Control,IoC)容器
基于Java的Bean元數據
如今,Java Config項目中的一些核心特性已經被添加到了Spring Framework項目中,這意味著現在Spring直接支持下面的這些注解了:
◆@Configuration
◆@Bean
◆@Primary
◆@Lazy
◆@Import
◆@Value
以下是一個Java類使用新JavaConfig特性提供基本配置的例子:
- @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);
- }
- }
要讓上面的代碼運行起來,你需要將如下組件掃描配置加入應用程序上下文XML文件中
- <context:component-scan
- base-package="com.myco.config"/>
#p#
在組件中定義Bean元數據
Spring組件中也同樣支持添加了@Bean注解的方法,它們為容器提供了一個工廠Bean。
數據層
對象 / XML映射功能(OXM)已經從Spring Web Services項目遷移到核心Spring Framework中了,可以在org.springframework.oxm包中找到它。
Web層
Web層中最令人興奮的新特性莫過于對構建RESTful Web服務和Web應用程序的支持了。此外,還有一些用于Web應用程序中的新注解。
全面的RESTful支持
通過對現有的注解驅動MVC Web框架的擴展,Spring Framework提供了構建RESTful應用程序的服務器端支持。客戶端的支持則由RestTemplate類提供,它和JdbcTemplate、JmsTemplate這些模板類非常類似。無論是服務器端還是客戶端的REST功能,都使用了HttpConverter來簡化對象與對應的HTTP請求/應答中的表述的轉換。
MarshallingHttpMessageConverter用到了之前提到的OXM功能。
更多@MVC注解
新增了幾個注解,例如@CookieValue和@RequestHeaders。詳見“使用@CookieValue注解映射Cookie值”和“用@RequestHeader注解映射請求頭屬性”。
聲明式模型驗證
Hibernate Validator,JSR303
進行中,未包括在Spring 3.0 M3中。
Java EE 6早期支持
我們提供了對使用@Async注解(或EJB 3.1的@Asynchronous注解)進行異步方法調用的支持,還支持JSF 2.0、JPA 2.0等。
進行中,未包括在Spring 3.0 M3中。
支持嵌入式數據庫
目前已經提供了對嵌入式Java數據庫引擎的支持,包括HSQL、H2和Derby。
【編輯推薦】