第3章 Spring 4.0增强和新功能 I -- Spring4.3.8参考文档中文版

2024-02-19 19:58

本文主要是介绍第3章 Spring 4.0增强和新功能 I -- Spring4.3.8参考文档中文版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二部分 Spring Framework 4.x中有什么新功能?

3. Spring 4.0增强和新功能 I

sunRainAmazing

Spring框架第一个版本发布于2004年,自发布以来已历经三个主要版本更新:

  1. Spring 2.0提供了XML命名空间和AspectJ支持;
  2. Spring 2.5增加了注释驱动(annotation-driven)的配置支持;
  3. Spring 3.0增加了对Java 5+版本的支持和@Configuration模型。

Spring 4.0是最新的主要版本,并且首次完全支持Java 8的特性。
你仍然可以使用老版本的Java,
但是最低版本的要求已经提高到Java SE 6
我们也借主要版本更新的机会删除了许多过时的类和方法。
你可以在 Spring Wiki文档 上查看 升级Spring 4.0迁移指南。

3.1 改进的入门体验

新的 spring.io 网站提供了一整个系列的 “入门指南” 帮助你学习Spring。
你可以本文档的 Spring 入门概述 一节的入门指南。
新网站还提供了Spring之下其他额外项目的一个全面的概述。
如果你是一个Maven用户,你可能会对 BOM 这个有用的POM文件感兴趣, 这个文件已经与每个Spring的发布版发布。

3.2 移除过时的包和方法

所有过时的包和许多过时的类和方法已经从Spring4中移除。
如果你从之前的发布版升级Spring,你需要保证已经修复了所有使用过时的API方法。
查看完整的变化: API差异报告。

请注意,所有可选的第三方依赖都已经升级到了最低2010/2011(例如Spring4通常只支持2010年的最新或者现在的最新发布版本):尤其是 Hibernate 3.6+、EhCache 2.1+、Quartz 1.8+、Groovy 1.8+、Joda-Time 2.0+。但是有一个例外,Spring4依赖最近的Hibernate Validator 4.3+,现在对Jackson的支持集中在2.0+版本 (Spring3.2支持的Jackson 1.8/1.9,现在已经过时)。

3.3 Java 8 (以及6和7)

Spring4支持Java8的一些特性。你可以在Spring的回调接口中使用 lambda 表达式 和 方法引用。
支持java.time (JSR-310)的值类型和一些改进过的注解,例如@Repeatable。
你还可以使用Java8的参数名称发现机制(基于-parameters编译器标志)。
Spring仍然兼容老版本的Java和JDK:Java SE 6(具体来说,支持JDK6 update 18)以上版本,我们建议新的基于Spring4的项目使用Java7或Java8。

3.4 Java EE 6和7

Java EE 6 或以上版本是Spring4的底线,与JPA2.0和Servlet3.0规范有着特殊的意义。
为了保持与Google App Engine和旧的应用程序服务器兼容,Spring4可以部署在Servlet2.5运行环境。
但是我们强烈的建议您在Spring测试和模拟测试的开发环境中使用Servlet3.0+。

【注】如果你是WebSphere 7的用户,一定要安装JPA2.0功能包。
在WebLogic 10.3.4或更高版本,安装附带的JPA2.0补丁。
这样就可以将这两种服务器变成Spring4兼容的部署环境。

从长远的观点来看,Spring4.0现在支持Java EE 7级别的适用性规范:
尤其是JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1 和JSR-236并发工具类。
像往常一样,支持的重点是独立的使用这些规范。
例如在Tomcat或者独立环境中。
但是,当把Spring应用部署到Java EE 7服务器时它同样适用。

注意,Hibernate 4.3是JPA 2.1的提供者,因此它只支持Spring4。
同样适用用于作为Bean Validation 1.1提供者的Hibernate Validator 5.0。这两个都不支持Spring3.2。

3.5 Groovy DSL定义Bean

Spring4.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 核心容器改进

有几种对核心容器的常规改进:
1、Spring现在注入Bean的时候把 泛型类型 当成一种形式的 限定符。
例如:如果你使用Spring Data Repository你可以方便的插入特定的实现:
@Autowired Repository customerRepository。

2、如果你使用Spring的元注解支持,你现在可以开发自定义注解来公开源注解的特定属性。

3、当自动装配到lists和arrays时,Beans现在可以被 排序 了。支持@Order注解和Ordered接口两种方式。

4、@Lazy注解现在可以用在注入点以及@Bean定义上。

5、引入@Description注解,开发人员可以使用基于Java方式的配置。

6、根据条件筛选Beans的广义模型通过@Conditional注解加入。这和@Profile支持的类似,但是允许以编程式开发用户定义的策略。

7、基于CGLIB的代理类不在需要默认的构造方法。这个支持是由 objenesis库提供。
这个库重新打包到Spring框架中,作为Spring框架的一部分发布。
通过这个策略,针对代理实例被调用没有构造可言了。

8、框架现在支持管理时区。例如LocaleContext。

3.7 常规Web改进

现在仍然可以部署到Servlet 2.5服务器,但是Spring4.0现在主要集中在Servlet 3.0+环境。
如果你使用Spring MVC测试框架,你需要将Servlet 3.0兼容的JAR包放到 测试的classpath下。

除了稍后会提到的WebSocket支持外,下面的常规改进已经加入到Spring的Web模块:

1、你可以在Spring MVC应用中使用新的@RestController注解,不在需要给@RequestMapping的方法添加@ResponseBody注解。

2、AsyncRestTemplate类已被添加进来,当开发REST客户端时,允许非阻塞异步支持。

3、当开发Spring MVC应用时,Spring现在提供了全面的时区支持 。
3.8 WebSocket、SockJS和STOMP消息
一个新的spring-websocket模块提供了全面的基于WebSocket和在Web应用的客户端和服务器之间双向通信的支持。
它和Java WebSocket API JSR-356兼容,此外还提供了当浏览器不支持WebSocket协议时的基于SockJS的备用选项。

一个新的spring-messaging模块添加了支持STOMP作为WebSocket子协议用于在应用中使用注解编程模型路由和处理从WebSocket客户端发送的STOMP消息。
由于@Controller现在可以同时包含@RequestMapping和@MessageMapping方法用于处理HTTP请求和来自WebSocket连接客户端发送的消息。
新的spring-messaging模块还包含了来自以前Spring集成项目的关键抽象,
例如Message、MessageChannel、MessageHandler和其他作为基于消息传递的应用程序的基础。

欲知详情以及较全面的介绍,请参见Chapter 20, WebSocket 支持一节。

3.9 测试改进

除了精简spring-test模块中过时的代码外,Spring4还引入了几个用于单元测试和集成测试的新功能。

1、几乎spring-test模块中所有的注解
(例如:@ContextConfiguration、@WebAppConfiguration、@ContextHierarchy、@ActiveProfiles等等)
现在可以用作元注解来创建自定义的composed annotations并且可以减少测试套件的配置。

2、现在可以以编程方式解决Bean定义配置文件的激活。
只需要实现一个自定义的ActiveProfilesResolver,并且通过@ActiveProfiles的resolver属性注册。

3、新的SocketUtils类被引入到了spring-core模块。这个类可以使你能够扫描本地主机的空闲的TCP和UDP服务端口。
这个功能不是专门用在测试的,但是可以证明在你使用Socket写集成测试的时候非常有用。
例如测试内存中启动的SMTP服务器,FTP服务器,Servlet容器等。

4、从Spring 4.0开始,org.springframework.mock.web包中的一套mock是基于Servlet 3.0 API。
此外,一些Servlet API mocks(例如:MockHttpServletRequest、MockServletContext等等)已经有一些小的改进更新,提高了可配置性。

这篇关于第3章 Spring 4.0增强和新功能 I -- Spring4.3.8参考文档中文版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725788

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听