1.Spring4.0的新特性
從2004年Spring的1.0發布后,后面又發布了很多重要的版本:Spring2.0提供了XML命令空間和AspectJ的支持;Spring2.5提出了注解驅動(annotation-driven)配置;Spring3.0引入了跨框架代碼庫的java 5+、基於java的Configuration模型等。
Spring 4.0是最近發布的主要版本,而且對java8完全支持。當然,你可以繼續使用低版本的java,但最低只能是java SE6。Spring 4.0里面也刪除了很多廢棄的類和方法。
升級Spring4.0的方法請參考:
https://github.com/spring-projects/spring-framework/wiki
1.1改進的入門體驗
新版sping.io網站為Spring的初學者提供了一系列的入門指南。這個網站也提供了很多基於Spirng的項目,供開發者學習。
如果你平時也使用Maven,那你應該對Spring的配套BOM(bill of materials)也感興趣。
1.2刪除的包和方法
Spring4.0里面刪除了很多包、類和方法,因此,在升級成4.0以前,首先要確保已經將過時的代碼修復。
要查看4.0的全部變化,請查看:
http://docs.spring.io/spring-framework/docs/3.2.4.RELEASE_to_4.0.0.RELEASE/。
1.3 JAVA8
Spring4.0能夠支持java 8的很多特性。你可以通過Spring的回調接口使用lambda
expressions and method。提供了java.time的支持,通過@Repeatable對很多注解進行了改造。
Spring4.0保持了對java低版本的兼容,但最低也只能是2010年1月發布的JDK 6 update 18。然后,對於新的基於Spring4的項目,建議使用java7或java8。
1.4 JAVA6/JAVA7
JAVA EE 6、JPA 2.0、Servlet 3.0被認為是Spring 4的baseline。為了保持和Google應用、其它較老應用服務的兼容,可能會將Spring 4集成到Servlet 2.5環境中。然而,建議最好使用Servlet 3.0以上。
Spring4支持JAVA EE7級別的相關規范,尤其是JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1, and JSR-236並行工具。
1.5Groovy Bean Definition DSL
通過Groovy DSL可以在Spring4里面定義外部bean配置文件。這和XML定義bean的方法類似,但語法更簡約。使用Groovy也使得在bootstrap代碼中輕松的嵌入bean定義。例如:

了解更多請參考:
1.6Core Container改進
Spring4的core container有很多改進的地方:
當注入bean的時候,Spring可以將泛型作為一種修飾符。比如你想用Spring的Repository,可以通過注入實現:@Autowired Repository<Customer> customerRepository。
如果你用過Spring的元注解支持,現在可以從元注解中開發定制化注解,實現定制屬性。
和@Bean定義一樣,@Lazy注解也可以在注入點(injection points)使用。
開發都可以使用基於java的配置來使用@Description注解。
通過@Conditional注解增加了條件過濾bean的廣義模型。
1.7General Web改進
Spring4.0框架目前只支持Servlet 3.0以上環境,如果你使用Spring MVC Test Framework,必須要確保在classpath中有Servlet 3.0兼容的JAR包。
每個@RequestMapping方法后不必再使用@ResponseBody,可以使用新的@RestController來實現。
提供了全面的時間區支持。
1.8Testing改進
Spring Framework 4.0為單元測試和集成測試增加了很多新的特性:
幾乎所有的spring-test模塊里的注解(例如@ContextConfiguration,
@WebAppConfiguration, @ContextHierarchy, @ActiveProfiles等)都可以被當作元注解,去創建定制組合注解,通過一個測試套件(test suite)減少配置重復;
通過實現ActiveProfilesResolver,並通過@ActiveProfiles的resolver屬性注冊,可以實現自動解析動態類(Active bean definition);
在spring-core模塊里引入SocketUtils類,可以掃描本地的TCP和UDP端口。雖然這個功能不是為測試專用,但當在集成測試中需要sockets時被證明是非常有用的。
2.Spring4.1的新特性
1.JAVA消息服務(JMS)改進
Spring 4.1引入@JmsListener來注冊JMS監聽端(JMS listener endpoints),同時引入XML空間jms:annotation-driven來支持此樣式。使用JmsListenerConfigurer也可以注冊監聽端。
在Spring 4.0中引入的spring-messaging在4.1中也同樣受益:受益於標准消息注解@Payload, @Header, @Headers, and @SendTo,可以實現消息監聽端的數字簽名。
Spring4.1中有了其它多方面的改進:
用JmsTemplate支持異步請求-回答操作;
通過<jms:listener/>屬性可以指定監聽優先級;
通過實現BackOff可以配置消息監聽模式的恢復選項。
