Part II. What’s New in Spring Framework 4.x
2014-03-31 10:02
204 查看
Part II. Spring Framework 4.x新特性
3. Spring Framework 4.0中的新特性和增强功能
Spring框架首次发布时在2004年;自从那以后已经出现了显著重大修改:Spring 2.0提供XML命名空间和AspectJ的支持;Spring2.5支持注解驱动配置;Spring3.0引入了很强大的Java5+为基础的框架代码,如基于@configuration的模型功能。版本4.0是Spring Framework最新的主要版本并且率先全面支持Java8的功能。你依然可以在旧版本的Java下使用Spring,然而,最低的要求已经提高到了Java SE 6。我们也乘这个重大改变的机会,移除了许多过时的类和方法。
升级到Spring4.0的迁移指南可以用 Spring Framework GitHub Wiki.
3.1 开始体验
新的Spring.io网站提供一系列的“入门”指南帮助你学习Spring。你可以阅读更多的关于指南的在Chapter 1, GettingStarted With Spring部分在这个文档。新的万展也提供全面的概述,关于很多发布在Spring下的额外项目。
如果你是一个Maven用户,你也许会对有用的"bill
of materials"POM文件感兴趣,发布在每个Spring框架发行版。
3.2 移除被遗弃的包和方法
所有的被遗弃的包和很多被遗弃的类和方法都被移除在版本4.0中。如果你是从一个较早的Spring版本升级,你应该确保你已经准备好遗弃的调用you should ensure that you have fixed any deprecated calls that you weremaking to outdated APIs。一套完整的变化,检查出API差异报告。
注意:可选的第三方依赖已经提高到2010/2011最低(即Spring 4通常的只支持在2010年底或者后来发布的版本):值得注意的是,Hibernate3.6+, EhCache 2.1+, Quartz 1.8+, Groovy 1.8+, and Joda-Time 2.0+. 作为一个例外,Spring需要最经的Hibernate Validate4.3+,而且现在支持Jackson一直专注于2.0+(Jackson 1.8/1.9 支持时间保留在Spring 3.2;现在只是废弃form)。
3.3 Java 8 (as well as 6 and 7)
Spring Framework 4.0提供了对几个Java 8特性的支持。你可以通过Spring 回调接口使用 lambda expressions 和 method references。有对java.time(JSR-310)优秀的支持,现有的几个注解被改装为@Repeatable。你也可以使用Java
8参数名发现(基于
-parameters编译器标志)作为一种选择编译你的代码通过启用调试信息。
Spring 保持和旧版本Java和JDK的兼容:具体的,Java SE6(具体说,一个最低水平相当于JDK6更新为18,在2010年一月发布),上面完全支持。然而,对于新开项目基于Spring 4,我们建议使用Java7或者8。
注意,Java 8的字节码级别(
-target 1.8, 根据
-source 1.8)是唯一全面支持Spring Framework 4.0的。特别是,Spring 3.2的应用程序需要与一个最大的Java7作为目标编译,即使他们被部署到一个Java 8运行时。请升级Spring 4到基于Java 8的应用程序。
3.4 Java EE 6 and 7
Java EE 6或者以上的版本现在被认为是Spring Framework4的基线,JPA 2.0和Servlet 3.0。为了与Google App Engine和旧的服务器保持兼容,他可以部署Spring 4的应用程序在Servlet2.5的环境下。然而,在开发环境中Servlet3.0+被强烈的推荐,在测试阶段先决条件的Spring测试和模拟软件包笔记 | |
---|---|
如果你是一个WebSphere 7用户,一定要安装JPA 2.0功能包。在WebLogic 10.3.4或者跟高版本,安装JPA2.0补丁。这两个服务器带到Spring4.0兼容的部署环境。 |
服务器。
注意Hibernate4.3是JPA2.1的提供者,因此只支持如Spring Framework 4.0。同样适用于Hibernate Vakudator5.0作为一个Bean Validation1.1提供商。无论是两个都不是正式支持Spring Framework3.2的。
3.5 Groovy Bean 定义 DSL
Spring Framework4.0支持使用Groovy DSL定义外部的Bean配置。这在概念上类似于使用XML Bean定义,但是它允许更简洁的语法。使用Groovy也允许你直接在你的引导代码中轻松地嵌入Bean定义。比如:def reader = new GroovyBeanDefinitionReader(myApplicationContext) reader.beans { dataSource(BasicDataSource) { driverClassName = "org.hsqldb.jdbcDriver" url = "jdbc:hsqldb:mem:grailsDB" username = "sa" password = "" settings = [mynew:"setting"] } sessionFactory(SessionFactory) { dataSource = dataSource } myService(MyService) { nestedBean = { AnotherBean bean -> dataSource = dataSource } } }
有关更多信息,查阅
GroovyBeanDefinitionReaderJavadoc.
3.6 核心容器的改进
有几个核心容器的一般改善:Spring将泛型类型视为一种修饰符,当注入Bean时。比如说如果你使用Spring Data
Repository, 你可以轻松地注入特殊实现
@Autowired Repository<Customer> customerRepository。
如果你使用Spring 元注解支持,你可以开发从源注解暴露特定的属性的自定义注解。
Bean可以被排序当他们自动装配成列表和数组。
@Ordered注解和Ordered接口都支持。
@Lazy注解可以用作注入点,以及
@Bean定义。
@Description注解已经为开发者被引进作为基本的Java配置。
一个针对有条件的filtering beans的一般模型已经通过添加
@Conditional注解。这是类似于
@Profilesupport ,但是允许用户定义的策略,以编程方式。
基于CGLIB的代理类不再需要默认的构造函数。支持通过objenesis库,重新包装内联和分布式作为Spring Framework的一部分。
重新包装内联inline和分布式distributed作为Spring
Framework的一部分。在此战略下,没有构造函数在所代理的示例被调用。
管理时区支持跨框架,如LocaleContext。
3.7 一般的Web改进
部署Servlet2.5服务仍是一个选项,但是Spring Framework4.0 主要集中在Servlet3.0+环境。如果你使用Spring MVC Test Framework,你需要确保Servlet 3.0兼容Jar在你的test类路径中。除了后面提到的WebSocket的支持,Spring Web模块已经做了下面的一般改进:
你可以在Spring MVC应用程序中使用新的
@RestController。移除了需要添加
@ResponseBody到每个
@RequestMapping的方法。
AsyncRestTemplate类已经添加,允许非阻塞异步支持non-blocking
asynchronous support,当开发REST客户端时。
Spring提供全面时区支持comprehensive
timezone support,当开发Spring MVC应用程序时。
3.8 WebSocket, SockJS, and STOMP Messaging
新的spring-websocket模块提供对基本的WebSocket,客户端和服务器之间双向连接全面的支持,在web应用程序中。他与JSR-356和JavaWebSocket API兼容,另外支持基于SockJS的后背选项 fallback
options(即WebSocket仿真),当使用那些还不支持WebSocket协议(如 Internet
Explorer < 10)的浏览器。
新的spring-messaging模块添加了在应用程序中对STOMP的WebSocket子协议的支持,连同注解编程模块用于从客户端对STOMP消息路由和处理。其结果@Controller可以同时包含
@RequestMapping和
@MessageMapping方法用于从WebSocket-connected客户端处理HTTP请求和消息。新的spring-messaging模块依然包含key抽象从Spring
Integration,就像
Message,
MessageChannel,
MessageHandler,为其他基于消息的应用程序奠定基础。
为了进一步了解详情,包括更深入的介绍,请参见Chapter 20, WebSocket
Support部分。
3.9 测试改进
除了在spring-test模块中移除弃用的代码,Spring Framework 4.0引进了一些新的功能在使用单元测试和集成测试。在spring-test 中几乎所有的注解(如
@ContextConfiguration,
@WebAppConfiguration,
@ContextHierarchy,
@ActiveProfiles等)都可以当做元注解创建自定义注解和降低重复配置在一个测试套件。
活跃的Bean定义配置组件可以通过编程解决,只需要实现自定义
ActiveProfilesResolver和通过的resolver属性@ActiveProfiles 注册它。
新的
SocketUtils类被引进
spring-core模块,使你能够扫描本地免费的TCP和UDP服务端口。这个功能不是特定于测试,但是可以证明非常有用当编写需要使用sockets的集成测试时,比如开始一个内存中的SMTP服务、FTP服务、Servlet容器等等。
org.springframework.mock.web包模拟是基于Servlet3.0 API。此外,几个Servlet API的模拟(如
MockHttpServletRequest,
MockServletContext等)都升级了轻微的增强和改进的可配置性。
相关文章推荐
- What the teacher said (using AspectJ with Spring part II).
- 对收藏夹中AspectJ和Spring结合使用例子(What the teacher said (using AspectJ with Spring part II). )的补充
- What is new in the .net framework 3.5?
- What's New in the .NET Framework Version 2.0
- What’s New in Entity Framework 4? API Changes(2)(转)
- What's New in the .NET Framework 2.0 Beta
- What's New in the .NET Framework Version 3.5
- What's New in the .NET Framework Version 4
- What's New in the .NET Framework 2.0 Beta
- What’s New in Entity Framework 4? API Changes(1)(转)
- 转:What's New in the .NET Framework 4
- Delphi in a Unicode World Part II: New RTL Features and Classes to Support Unicode
- What's in application layer? Answers from googling springframework
- What's New in the .NET Framework 2.0 Beta
- What's new in Spring 2.0?
- How to change GrantedAuthority dynamically in Spring Security framework
- What else is new in C# 5?
- Intanced Tessellation -- A new part of the GPU pipeline for surface techniques in DX10 and coming DX11
- Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/ResolvableTypePr