Spring

2016/09/20

Spring

Spring各个版本引入了哪些特性?

Spring Framework Java SE Java EE
1.x 1.3+ J2EE 1.3+
2.x 1.4.2+ J2EE 1.3+
3.x 5+ J2EE 1.4 和 Java EE 5
4.x 6+ J2EE 6 和 7
5.x 8+ J2EE 7

Spring 3.0 以前Spring是一个集成大包,3.0开始拆分成多个小包,可以按需独立引用。

Spring 3.x

Spring 3.x 新特性:

  • 引入环境profile功能,多环境配置支持
  • 添加@enable注解
  • 支持Servlet 3.0,基于Java Config配置Servlet和Filter,无需借助web.xml
  • 支持声明式缓存

Spring MVC 新特性:

  • 提供@RequestMapping注解,produces和consumers属性,用于匹配请求中的Accept和Content-Type头部信息
  • 可以使用Servlet 3.0的异步请求,允许一个独立的线程处理请求
  • 引入SpringMVC测试框架,测试过程中无需再使用Servlet容器
  • @ControllerAdvice注解
  • 可以动态配置DispatherServlet

Spring 4.x

Spring 4.x 新特性:

  • 支持WebSocket编程
  • 支持Lambda表达式

Spring 5.x

Spring 5.x 新特性:

  • 响应式Web编程,Spring WebFlux
  • 支持 HTTP/2

SpringBoot 2.x

  • JDK 8+
  • Tomcat 8.5+
  • Spring 5.x
  • 响应式编程
  • 支持 HTTP/2
  • 支持Spring MVC、WebFlux 和 Jersey
  • 支持Quartz
  • 数据库连接池,默认引入HikariCP,替代之前的Tomcat-Pool
  • Redis,默认引入Lettuce,替代之前的Jedis
  • 支持OAuth 2.0

HTTP/2相比HTTP/1.X

  1. 采用二进制格式传输数据,而非HTTP/1.X的文本格式。在协议的解析和优化性能上更有优势。
  2. 消息头采用HPACK进行压缩传输,节省网络流量。
  3. 多路复用,所有请求通过一个TCP连接并发送完成。HTTP/1.X虽然用pipeline也能并发请求,但是多个请求之间的响应会阻塞。
  4. Server Push,服务端能够主动推送数据到客户端。

Lettuce

线程安全的Redis客户端,支持同步、异步和响应式。多个线程共用一个RedisConnection。它利用Netty管理多个连接,支持Sentinel、集群、Pipeline、自动重连等功能。

HakariCP

高性能的JDBC连接池

响应式Web编程

左侧是基于Servlet的Spring Web MVC框架,右侧是5.0版本新引入的基于Reactive Streams的Spring WebFlux框架,从上到下依次是Router Functions,WebFlux,Reactive Streams三个新组件。

  • Router Functions: 对标@Controller,@RequestMapping等标准的Spring MVC注解,提供一套函数式风格的API,用于创建Router,Handler和Filter。
  • WebFlux: 核心组件,协调上下游各个组件提供响应式编程支持。
  • Reactive Streams: 一种支持背压(Backpressure)的异步数据流处理标准,主流实现有RxJava和Reactor,Spring WebFlux默认集成的是Reactor。

在Web容器的选择上,Spring WebFlux既支持像Tomcat,Jetty这样的的传统容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那样的异步容器。不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux格式,以便进行统一处理。

值得一提的是,除了新的Router Functions接口,Spring WebFlux同时支持使用老的Spring MVC注解声明Reactive Controller。和传统的MVC Controller不同,Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse,而不再是Spring MVC里的HttpServletRequest和HttpServletResponse。

IOC

AOP

Transactional

Web MVC

配置不全

配置加载顺序

MySql 存储引擎不支持事务

  • MyISAM 适用于查询,不支持事务处理
  • InnoDB 支持事务处理

Post Directory