3. Spring Framework 4.0中的新功能和增强功能

Spring Framework于2004年首次发布;从那以后出现了重大的重大修改:Spring 2.0提供了XML命名空间和AspectJ支持; Spring 2.5采用了注释驱动的配置; Spring 3.0在框架代码库中引入了强大的Java 5基础,以及基于Java的 @Configuration 模型等功能。

4.0版是Spring Framework的最新主要版本,也是第一个完全支持Java 8功能的版本。您仍然可以将Spring与旧版本的Java一起使用,但是,现在已将最低要求提升到Java SE 6.我们还利用主要版本的机会删除了许多已弃用的类和方法。

Spring Framework GitHub Wiki 上有 migration guide for upgrading to Spring 4.0

3.1 改进了入门体验

新的 spring.io 网站提供了一系列 "Getting Started" 指南,以帮助您学习Spring。您可以在本文档的 Chapter 1, Getting Started with Spring 部分中阅读有关指南的更多信息。新网站还全面概述了在Spring保护伞下发布的许多其他项目。

如果您是Maven用户,您可能还对现在随每个Spring Framework版本发布的有用的 bill of materials POM文件感兴趣。

3.2 删除了不推荐使用的包和方法

已使用4.0版删除了所有已弃用的软件包以及许多已弃用的类和方法。如果要从以前版本的Spring升级,则应确保已修复对过时API所做的任何已弃用的调用。

如需完整的更改,请查看 API Differences Report

请注意,可选的第三方依赖项已提升到2010/2011最低要求(即Spring 4通常仅支持2010年末或之后发布的版本):值得注意的是,Hibernate 3.6,EhCache 2.1,Quartz 1.8,Groovy 1.8和Joda-时间2.0。作为规则的一个例外,Spring 4需要最近的Hibernate Validator 4.3,并且对Jackson的支持现在已经集中在2.0上(暂时保留了Jackson 1.8 / 1.9支持,其中Spring 3.2拥有它;现在只是处于弃用状态) 。

3.3 Java 8(以及6和7)

Spring Framework 4.0支持多种Java 8功能。您可以使用Spring的回调接口来使用lambda表达式和方法引用。对 java.timeJSR-310 )有一流的支持,并且几个现有的注释已被改装为 @Repeatable 。您还可以使用Java 8的参数名称发现(基于 -parameters 编译器标志)作为在启用调试信息的情况下编译代码的替代方法。

Spring仍然与旧版本的Java和JDK兼容:具体而言,仍然完全支持Java SE 6(具体而言,相当于JDK 6更新18的最低级别,如2010年1月发布的)及以上版本。但是,对于基于Spring 4的新开始的开发项目,我们建议使用Java 7或8。

截至2017年底,JDK 6正在逐步淘汰,因此也是Spring的JDK 6支持。 Oracle和IBM将在2018年终止JDK 6的所有商业支持工作。虽然Spring将保留其整个4.3.x系列的JDK 6运行时兼容性,但我们需要升级到JDK 7或更高版本以获得超出此点的任何进一步支持:特别是对于JDK 6特定的错误修复或升级到JDK 7解决问题的其他问题。

3.4 Java EE 6和7

Java EE版本6或更高版本现在被认为是Spring Framework 4的基线,JPA 2.0和Servlet 3.0规范特别相关。为了与Google App Engine和旧版应用程序服务器保持兼容,可以将Spring 4应用程序部署到Servlet 2.5环境中。但是,强烈建议使用Servlet 3.0,这是Spring的测试和模拟软件包中的先决条件,用于开发环境中的测试设置。

如果您是WebSphere 7用户,请确保安装JPA 2.0功能部件包。在WebLogic 10.3.4或更高版本上,安装随附的JPA 2.0修补程序。这将这两代服务器转变为兼容Spring 4的部署环境。

从更具前瞻性的角度来看,Spring Framework 4.0现在支持Java EE 7级别的适用规范:特别是JMS 2.0,JTA 1.2,JPA 2.1,Bean Validation 1.1和JSR-236 Concurrency Utilities。像往常一样,这种支持侧重于个人使用这些规范,例如在Tomcat或独立环境中。但是,将Spring应用程序部署到Java EE 7服务器时,它同样适用。

请注意,Hibernate 4.3是JPA 2.1提供程序,因此仅在Spring Framework 4.0中受支持。这同样适用于Hibernate Validator 5.0作为Bean Validation 1.1提供程序。 Spring Framework 3.2都没有正式支持这两者。

3.5 Groovy Bean定义DSL

从Spring Framework 4.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 javadocs

3.6 核心容器改进

核心容器有一些一般的改进:

  • Spring现在在注入Beans时对待 generic types as a form of qualifier 。例如,如果您使用的是Spring Data Repository ,现在可以轻松注入特定的实现: @Autowired Repository<Customer> customerRepository

  • 如果您使用Spring的元注释支持,您现在可以开发 expose specific attributes from the source annotation 的自定义注释。

  • 现在可以在 autowired into lists and arrays 时订购 beans 类。支持 @Order 注释和 Ordered 接口。

  • 现在可以在注入点以及 @Bean 定义上使用 @Lazy 注释。

  • @Description annotation has been introduced 适用于使用基于Java的配置的开发人员。

  • 已通过 @Conditional 注释添加了 conditionally filtering beans 的通用模型。这类似于 @Profile 支持,但允许以编程方式开发用户定义的策略。

  • CGLIB-based proxy classes 不再需要默认构造函数。支持通过 objenesis 库提供,该库在内部重新打包并作为Spring Framework的一部分进行分发。使用此策略,根本不再为代理实例调用构造函数。

  • 现在整个框架都有受管理的时区支持,例如在 LocaleContext

3.7 一般网站改进

部署到Servlet 2.5服务器仍然是一个选项,但Spring Framework 4.0现在主要关注Servlet 3.0环境。如果您使用的是 Spring MVC Test Framework ,则需要确保与测试类路径中的Servlet 3.0兼容的JAR。

除了后面提到的WebSocket支持之外,还对Spring的Web模块进行了以下一般性改进:

3.8 WebSocket,SockJS和STOMP Messaging

新的 spring-websocket 模块为Web应用程序中客户端和服务器之间基于WebSocket的双向通信提供全面支持。它与 JSR-356 ,Java WebSocket API兼容,另外还提供基于SockJS的回退选项(即WebSocket仿真),用于尚不支持WebSocket协议的浏览器(例如Internet Explorer <10)。

新的 spring-messaging 模块添加了对STOMP的支持,作为在应用程序中使用的WebSocket子协议以及用于从WebSocket客户端路由和处理STOMP消息的注释编程模型。因此, @Controller 现在可以包含 @RequestMapping@MessageMapping 方法,用于处理来自WebSocket连接的客户端的HTTP请求和消息。新的 spring-messaging 模块还包含以前来自 Spring Integration 项目的关键抽象,例如 MessageMessageChannelMessageHandler 等,以作为基于消息传递的应用程序的基础。

有关更多详细信息,包括更全面的介绍,请参阅 Chapter 26, WebSocket Support 部分。

3.9 测试改进

除了在 spring-test 模块中修剪已弃用的代码之外,Spring Framework 4.0还引入了几个用于单元和集成测试的新功能。

  • spring-test 模块中的几乎所有注释(例如, @ContextConfiguration@WebAppConfiguration@ContextHierarchy@ActiveProfiles 等)现在都可以用作 meta-annotations 来创建自定义组合注释并减少测试套件中的配置重复。

  • 现在可以通过编程方式解析活动bean定义配置文件,只需实现自定义 ActiveProfilesResolver 并通过 @ActiveProfilesresolver 属性注册即可。

  • spring-core 模块中引入了一个新的 SocketUtils 类,使您可以在localhost上扫描免费的TCP和UDP服务器端口。此功能并非特定于测试,但在编写需要使用套接字的集成测试时非常有用,例如启动内存中SMTP服务器,FTP服务器,Servlet容器等的测试。

  • 从Spring 4.0开始, org.springframework.mock.web 包中的模拟集现在基于Servlet 3.0 API。此外,一些Servlet API模拟(例如, MockHttpServletRequestMockServletContext 等)已经过更新,具有微小的增强功能和改进的可配置性。

Updated at: 5 months ago
II. Spring Framework 4.x中有什么新功能Table of content4. Spring Framework 4.1中的新增功能和增强功能
Comment
You are not logged in.

There are no comments.