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