主题
入门
在 Java EE 领域,Spring Boot 在传统 Spring 框架的基础上做了创新和优化,将开发人员从以往烦琐的配置工作中解放出来,并提供了大量即插即用的集成化组件,从而解决了各种组件之间复杂的整合过程,大大提高了开发效率,降低了维护成本。
框架的核心思想: 约定优于配置
Spring 家族技术体系
Spring官网罗列了该框架的七大核心技术体系,分别是微服务架构、响应式编程、云原生、Web 应用、Serverless 架构、事件驱动以及批处理。
Spring Batch :实现轻量级的批处理任务,比如日常报表,
Spring Cloud Stream:事件驱动架构,集成了主流消息中间件
响应式编程:是 Spring 5 引入的最大创新,代表了一种系统架构设计和实现的技术方向
Spring是一种容器,包含基于依赖注入机制的 JavaBean 处理、面向切面 AOP、上下文 Context及 Spring 自身所提供的表达式工具等一些辅助功能
Spring Boot 的核心功能就是自动配置。运行过程同样还是依赖于 Spring MVC,但是它把原本需要开发人员指定的各种配置项设置了默认值,并内置在了运行时环境中,例如默认的服务器端口就是 8080,如果我们不需要对这些配置项有定制化需求,就可以不做任何的处理,采用既定的开发约定即可。这就是 Spring Boot 所倡导的**约定优于配置(Convention over Configuration)**设计理念。
Spring Boot 通过Actuator 组件实现了监控机制,监控信息包括内存信息、JVM 信息、垃圾回收等信息。一方面我们可以查看包含自动配置在内的应用程序详细信息,另一方面可以实时监控该应用程序的运行时健康状态。
Spring Cloud 构建在 Spring Boot 基础之上
技术组件的完备性是 Spring Cloud 框架的主要优势,它集成了业界一大批知名的微服务开发组件,比如服务发现注册、API 网关、配置中心、消息总线、负载均衡、熔断器、数据监控等。
Spring 5 与响应式编程
目前,Spring 已经演进到 5.X 版本。随着 Spring 5 的正式发布,迎来了响应式编程(Reactive Programming)的全新发展时期。
Spring 5 中内嵌了与数据管理相关的响应式数据访问、与系统集成相关的响应式消息通信以及与 Web 服务相关的响应式 Web 框架等多种响应式组件,从而极大地简化了响应式应用程序的开发过程和开发难度。
我们知道传统的 Spring MVC 构建在 Java EE 的 Servlet 标准之上,该标准本身就是阻塞式和同步的,而 Spring WebFlux 基于响应式流,因此可以用来构建异步非阻塞的服务。
在 Spring 5 中,选取了 Project Reactor 作为响应式流的实现库。由于响应式编程的特性,Spring WebFlux 和 Project Reactor 的运行需要依赖于诸如 Netty 和 Undertow 等支持异步机制的容器。同时我们也可以选择使用较新版本的 Tomcat 和 Jetty 作为运行环境,因为它们支持异步 I/O 的 Servlet 3.1。
Spring MVC 和 Spring WebFlux 之间的区别和联系
Spring MVC 和 Spring WebFlux 是 Spring 框架中用于构建 Web 应用程序的两个不同的模型,它们在设计和运行时特性上有所区别,同时也有一些联系。
区别:
执行模型:
- Spring MVC: 基于同步、阻塞I/O模型,它遵循传统的Servlet API,并在Servlet容器(如Tomcat)中运行。每个HTTP请求通常由一个单独的线程处理,直到响应完成。
- Spring WebFlux: 基于异步、非阻塞的反应式编程模型,支持Reactor和Project Reactor库以及Reactive Streams规范。WebFlux可以运行在Netty、Undertow等非阻塞服务器上,也可以在支持Servlet 3.1以上标准的容器上运行,但它不依赖Servlet API来实现其核心功能。
资源利用率:
- Spring MVC: 在高并发场景下,需要大量的线程池来应对可能发生的阻塞,这可能导致更多的内存消耗。
- Spring WebFlux: 通过复用少量线程和事件循环,能够更好地处理高并发场景,减少系统资源开销,提高吞吐量和降低延迟。
编程模型与API:
- Spring MVC: 使用注解驱动的方式定义控制器方法、路由映射等,适合同步编程风格。
- Spring WebFlux: 提供了基于Mono和Flux的反应式编程接口,开发者需要编写异步、流式的代码逻辑。
数据处理:
- Spring MVC: 对于IO密集型操作,如果采用传统的同步模式,可能会阻塞线程,影响性能。
- Spring WebFlux: 适用于大量IO操作,比如网络I/O密集型应用,通过背压机制有效地管理数据流和资源。
联系:
Spring框架集成:
- 两者都集成在Spring框架内,共享许多相同的组件和服务,例如Spring Security、Spring Data等。
可选性:
- 在Spring Boot应用中,开发者可以根据需求选择使用Spring MVC还是Spring WebFlux,甚至在同一应用中结合使用,以适应不同场景的需求。
控制器层设计:
- 两者都提供了声明式的控制器设计,只是在WebFlux中,控制器方法返回的是Mono或Flux类型,而MVC中是直接返回结果对象或视图名称。
总之,Spring MVC更适合传统的同步开发方式和对Servlet环境有依赖的应用,而Spring WebFlux则为那些寻求更高并发性能和反应式编程体验的现代云原生架构提供了支持。
核心功能
1.独立运行的Spring项目;
2.内嵌的Servlet容器;
3.提供starter简化Manen配置;
4.自动配置Spring;
5.应用监控;
6.无代码生成和XML配置
HTTP协议完成请求和响应过程
HTTP请求 -> URL地址的映射 -> 请求参数构建 -> 对象序列化 -> 业务逻辑处理 -> 对象反序列化