Part II. What’s New in Spring Framework 4.x

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模块已经做了下面的一般改进:

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,就像MessageMessageChannelMessageHandler,为其他基于消息的应用程序奠定基础。

  为了进一步了解详情,包括更深入的介绍,请参见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的模拟(如MockHttpServletRequestMockServletContext 等)都升级了轻微的增强和改进的可配置性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值