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
- 采用二进制格式传输数据,而非HTTP/1.X的文本格式。在协议的解析和优化性能上更有优势。
- 消息头采用HPACK进行压缩传输,节省网络流量。
- 多路复用,所有请求通过一个TCP连接并发送完成。HTTP/1.X虽然用pipeline也能并发请求,但是多个请求之间的响应会阻塞。
- 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 支持事务处理