您的位置:首页 > 编程语言 > Java开发

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, Getting
Started 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 were
making 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兼容的部署环境。
一个更具前瞻性的注意,Spring Framework 4.0 支持Java EE 7的应用程序:特别是JMS2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1, and JSR-236 并发实用程序。像往常一样,这种支持的重点是个人使用的规范,比如在Tomcat上或者独立的环境中。但是,它同样适用于,当一个Spring应用程序部署到Java7
服务器。
注意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
}
}
}

有关更多信息,查阅
GroovyBeanDefinitionReader
Javadoc.

3.6 核心容器的改进

有几个核心容器的一般改善:

Spring将泛型类型视为一种修饰符,当注入Bean时。比如说如果你使用Spring Data
Repository
, 你可以轻松地注入特殊实现
@Autowired
Repository<Customer> customerRepository。


如果你使用Spring 元注解支持,你可以开发从源注解暴露特定的属性的自定义注解。

Bean可以被排序当他们自动装配成列表和数组。
@Ordered
注解和Ordered接口都支持。

@Lazy
注解可以用作注入点,以及
@Bean定义。

@Description注解已经为开发者被引进作为基本的Java配置。
一个针对有条件的filtering beans的一般模型已经通过添加
@Conditional
注解。这是类似于
@Profile
support ,但是允许用户定义的策略,以编程方式。
基于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和Java
WebSocket 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
等)都升级了轻微的增强和改进的可配置性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: