详解SpringBoot的Run方法

SpringBoot的Run方法:

先跟踪启动类的run方法

进去之后还实现有一个run方法,继续进入

到这里,可以看到有一个SpringApplication的构造器,进入

进入this

到这里的代码就显示的多了,分析一下:

源码注释的解释是:创建一个新的实例。将加载应用程序上下文来自指定主源的bean

此方法主要进行:前面进行判断是什么类型的Web,后面进行加载实例

类型:

进入WebApplicationType,有三种类型,分别是

REACTIVE(响应式Web),NONE(不是Web),SERVLET(普通Web)

用来判断提供类名的类是否存在,并且是否可以被加载

  • 如果是一个响应式web应用org.springframework.web.reactive.DispatcherHandler,需要去加载启动内嵌的响应式web服务器
  • 如果没有javax.servlet.Servlet或者org.springframework.web.context.ConfigurableWebApplicationContext则不是web应用,无需加载启动内嵌的web服务器
  • 如果是一个普通的servlet的web应用,启动时需要加载启动内嵌的servlet的web服务器(比如Tomcat)

加载实例:

进入getSpringFactoriesInstances方法:

继续进入:

可以看出是根据名字进行加载返回实例,在进入loadFactoryNames方法:

进入loadSpringFactories方法:

可以看见是从FACTORIES_RESOURCE_LOCATION这个里面进行加载

spring.factories文件是一组组的key=value的形式,包含了key为EnableAutoConfiguration的全类名,value是一个AutoConfiguration类名的列表,以逗号分隔。

此文件下还有一个文件spring-autoconfigure-metadata.properties,有加载的条件

@Conditional注释,此注释使得只有在特定条件满足时才启用一些配置。

  • @ConditionalOnBean

仅仅在当前上下文中存在某个对象时,才会实例化一个Bean。

  • @ConditionalOnClass

某个class位于类路径上,才会实例化一个Bean

  • @ConditionalOnExpression

当表达式为true的时候,才会实例化一个Bean。

其中EnableAutoConfiguration作为spring注解用来开启自动配置,进行自动装配。

到此这篇关于详解SpringBoot的Run方法的文章就介绍到这了,更多相关SpringBoot的Run方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot 启动方法run()源码解析

    入口 通常一个简单的SpringBoot基础项目我们会有如下代码 @SpringBootApplication @RestController @RequestMapping("/") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 值得关注的有SpringApplication.run以及注解@

  • springboot使用CommandLineRunner解决项目启动时初始化资源的操作

    前言: 在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等. 今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans 都初始化之后,SpringApplication.run() 之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作. 正文

  • 解决没有@RunWith 和 @SpringBootTest注解或失效问题

    导入别人的项目 或者 自己想创建一个测试类 经常会遇见了这个问题没有@RunWith 和 @SpringBootTest注解或失效 网上搜了搜 全是我下面的第一个解决方案 第二个才是重点 解决方案 1 添加依赖 如果 你是springboot项目 pom文件中添加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</

  • springboot CommandLineRunner接口实现自动任务加载功能

    CommandLineRunner接口可以实现任务的自动加载,当项目启动完后,就会自动去执行CommandLineRunner接口里的run方法,你可以实现多个CommandLineRunner的实例,使用order来控制执行的顺序! /** * 项目启动后自动运行的代码CommandLineRunner */ @Component @Order(1) public class MyStartupRunner1 implements CommandLineRunner { private Log

  • 详解SpringBoot的Run方法

    SpringBoot的Run方法: 先跟踪启动类的run方法 进去之后还实现有一个run方法,继续进入 到这里,可以看到有一个SpringApplication的构造器,进入 进入this 到这里的代码就显示的多了,分析一下: 源码注释的解释是:创建一个新的实例.将加载应用程序上下文来自指定主源的bean 此方法主要进行:前面进行判断是什么类型的Web,后面进行加载实例 类型: 进入WebApplicationType,有三种类型,分别是 REACTIVE(响应式Web),NONE(不是Web)

  • 详解SpringBoot配置文件启动时动态配置参数方法

    序言 当我们要同时启用多个项目而又要使用不同端口或者变换配置属性时,我们可以在配置文件中设置${变量名}的变量来获取启动时传入的参数,从而实现了动态配置参数,使启用项目更加灵活 例子 server: port: ${PORT:50101} #服务端口 spring: application: name: xc‐govern‐center #指定服务名 eureka: client: registerWithEureka: true #服务注册,是否将自己注册到Eureka服务中 fetchReg

  • 详解SpringBoot读取配置文件的N种方法

    我们在项目开发中经常会用到配置信息,例如数据库连接的帐号.密码等,而为了方便维护,我们通常将这些信息放到配置文件中.在需要用到这些配置信息时,可以通过代码获取.下面我们看看Spring中有哪些获取配置信息的方法. PropertiesLoaderUtils读取 通过ClassPathResource加载配置文件资源,结合PropertiesLoaderUtils类读取,源码如下: ClassPathResource resource = new ClassPathResource("applic

  • 详解SpringBoot中自定义和配置拦截器的方法

    目录 1.SpringBoot版本 2.什么是拦截器 3.工作原理 4.拦截器的工作流程 4.1正常流程 4.2中断流程 5.应用场景 6.如何自定义一个拦截器 7.如何使其在Spring Boot中生效 8.实际使用 8.1场景模拟 8.2思路 8.3实现过程 8.4效果体验 9.总结 1.SpringBoot版本 本文基于的Spring Boot的版本是2.6.7 . 2.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于ServLet中的过滤器(Filter),它

  • 详解SpringBoot 统一后端返回格式的方法

    目录 为什么要对SpringBoot返回统一的标准格式 定义返回标准格式 定义返回对象 定义状态码 统一返回格式 高级实现方式 接口异常问题 SpringBoot为什么需要全局异常处理器 如何实现全局异常处理器 体验效果 全局异常接入返回的标准格式 首先我们来看看为什么要返回统一的标准格式? 为什么要对SpringBoot返回统一的标准格式 在默认情况下,SpringBoot的返回格式常见的有三种: 第一种:返回 String @GetMapping("/hello") public

  • SpringBoot详解整合Redis缓存方法

    目录 1.Spring Boot支持的缓存组件 2.基于注解的Redis缓存实现 3.基于API的Redis缓存实现 1.Spring Boot支持的缓存组件 在Spring Boot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springframework.cache.Cache和org.springframework.cache.CacheManager缓存管理器接口. 如果程序中没有定义类型为CacheManager的Bean组件或者是名为cacheResolve

  • 详解SpringBoot 应用如何提高服务吞吐量

    意外和明天不知道哪个先来.没有危机是最大的危机,满足现状是最大的陷阱. 背景 生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议. 方案 1.undertow替换tomcat 电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤: 1.增加pom配置 <dependency> <groupid> org.springframework.boot </groupid>

  • 详解springboot设置默认参数Springboot.setDefaultProperties(map)不生效解决

    我们都知道springboot 由于内置tomcat(中间件)直接用启动类就可以启动了. 而且我们有时想代码给程序设置一些默认参数,所以使用方法Springboot.setDefaultProperties(map) SpringApplication application = new SpringApplication(startClass); // Map<String, Object> params = new HashMap<>(); params.put("l

  • 详解springboot项目带Tomcat和不带Tomcat的两种打包方式

    1,带Tomcat的打包方式 1.1, 在pom.xml文件添加以下配置(目的:自定main入口和跳过Junit代码) <build> <plugins> <!--打包为jar时指定main入口--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <

  • 详解SpringBoot中的tomcat优化和修改

    项目背景 在做项目的时候,把SpringBoot的项目打包成安装包了,在客户上面安装运行,一切都是那么的完美,可是发生了意外,对方突然说导出导入的文件都不行了.我急急忙忙的查看日志,发现报了一个错误 java.io.IOException: The temporary upload location [C:\Windows\Temp\tomcat.1351070438015228346.8884\work\Tomcat\localhost\ROOT] is not valid at org.ap

随机推荐