springboot如何确定当前应用程序是响应式的还是非响应式的

简介: springboot如何确定当前应用程序是响应式的还是非响应式的

一、介绍

大多数java后端开发的朋友们想必都是通过创建springboot项目,然后通过编写Controller进行接口开发的,该接口底层是由非响应式的servlet提供支持的,其接口内部逻辑为阻塞式的。但也有一部分朋友是通过响应式的reactive进行接口开发,其接口内部逻辑为非阻塞式的,特点就是代码逻辑异步执行,速度比阻塞式的servlet更快。

本片文章我们探讨springboot是如何知道我们的应用是非响应式的servlet类型的应用,还是响应式的reactive类型的应用呢?下面我们通过对springboot启动流程的源码进行分析,便可得到答案。

二、源码分析

当我们在springboot的主启动类中使用SpringApplicaton.run()启动项目时,其内部其实是先创建一个SpringApplicaton实例,然后对该实例调用其run()方法,如下图所示

调用SpringApplication实例的run()方法.png

在创建SpringApplicaton实例时,该构造方法内部确定当前应用程序类型并将该类型保存到webApplicationType属性中,如下图所示

SpringApplication构造方法.png

从该行代码可以看出,springboot通过调用WebApplicationType的静态方法deduceFromClasspath()推断出当前应用程序类型

WebApplicationType的静态方法deduceFromClasspath().png

从该方法中看到,推断过程无非就是从类路径中判断是否存在指定的类

  • 如果类路径中存在servlet相关的类,那么当前应用程序就是servlet类型的应用程序
  • 如果类路径中仅存在reactive相关的类,那么当前应用程序就是响应式类型的应用程序
  • 如果以上两种类都不存在,那么当前应用程序就什么类型的应用程序都不是了。

判断类路径中判断是否存在指定的类只需要调用ClassUtils的静态方法isPresent()就行了。而在该静态方法中,则是通过对传入的类进行反射去实例化,如果实例化失败并抛出了异常,则说明该类是不存在的。

三、测试

  • 既不存在reactive相关的类,也不存在servlet相关的类

    在pom中我们仅仅引入springboot的依赖

    仅仅引入springboot的依赖.png

然后启动项目进入断点,查看当前应用程序的类型,确定为NONE类型的应用程序

NONE类型的应用程序.png

  • 仅存在reactive相关的类

    在pom中我们引入springboot的依赖 和 reactive相关的依赖

    引入springboot的依赖和reactive相关的依赖.png

然后启动项目进入断点,查看当前应用程序的类型,确定为响应式类型的应用程序

响应式类型的应用程序.png

  • 存在servlet相关的类

    在pom中我们引入springboot的依赖 和 servlet相关的依赖

    引入springboot的依赖和servlet相关的依赖.png

然后启动项目进入断点,查看当前应用程序的类型,确定为servlet类型的应用程序

servlet类型的应用程序.png



纸上得来终觉浅,绝知此事要躬行。

————————我是万万岁,我们下期再见————————

相关文章
|
3月前
|
开发框架 Java 测试技术
SpringBoot3 响应式网络请求客户端
SpringBoot3 响应式网络请求客户端
|
7月前
|
Java 应用服务中间件 开发工具
深入了解Spring Boot:简化Java应用程序开发的利器
Spring Boot是一款用于构建Java应用程序的框架,它旨在简化应用程序的开发过程,同时提供了强大的功能和灵活性。无论是构建小型微服务还是大型企业级应用,Spring Boot都可以帮助您快速启动和开发项目。本文将深入介绍Spring Boot的关键概念和功能,以便您能够更好地利用这个强大的工具。
|
5月前
|
存储 Java API
如何在Spring Boot应用程序中使用华为云的OBS云存储来上传和删除图片?
如何在Spring Boot应用程序中使用华为云的OBS云存储来上传和删除图片?
131 1
|
10天前
|
Java 应用服务中间件 Maven
【SpringBoot系列】第一课:构建一个简单的SpringBoot应用程序
【4月更文挑战第3天】构建第一个SpringBoot应用程序
|
4月前
|
Java 测试技术 应用服务中间件
使用 Spring Boot 构建应用程序
本指南提供了 Spring Boot 如何帮助您加速应用程序开发的示例。
|
2月前
|
存储 开发框架 算法
|
3月前
|
JavaScript 前端开发 Java
深入探索Spring Boot的核心功能:快速构建原生程序响应式处理数据(文末送书)
深入探索Spring Boot的核心功能:快速构建原生程序响应式处理数据(文末送书)
29 0
|
3月前
|
前端开发 Java 测试技术
SpringBoot - 应用程序测试方案
SpringBoot - 应用程序测试方案
55 0
|
5月前
|
Java 数据库 Docker
Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序
接下来,我们需要创建一个 Dockerfile,其中包含了构建 Java 映像所需的指令。在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件,并将以下内容添加到其中:
113 0
|
7月前
|
Java Linux Maven
使用Docker和Dockerfile部署SpringBoot项目应用程序
使用Docker和Dockerfile部署SpringBoot项目应用程序
189 0