SPRINGBOOT启动原理(基于3.x版本)(三)- SpringApplication里有啥

简介: SPRINGBOOT启动原理(基于3.x版本)(三)- SpringApplication里有啥


版本

版本:3…0.1

引入

基本上所有的springboot项目,在启动类中,都会有这一句:

public static void main(String[] args) {
        SpringApplication.run(SpringTestApplication.class, args);
    }

这也是我们整个程序的入口,spring的启动,从此开始。

SpringApplication里的那些成员变量

/**
   * Default banner location.
   * 默认banner位置
   */
  public static final String BANNER_LOCATION_PROPERTY_VALUE = SpringApplicationBannerPrinter.DEFAULT_BANNER_LOCATION;
  /**
   * Banner location property key.
   * spring.banner.location 自定义banner时,使用该配置指定位置
   */
  public static final String BANNER_LOCATION_PROPERTY = SpringApplicationBannerPrinter.BANNER_LOCATION_PROPERTY;
  //Headless模式是系统的一种配置模式。在系统可能缺少显示设备、键盘或鼠标这些外设的情况下可以使用该模式。
  //参考:https://www.jianshu.com/p/7248b3ff5ca7
  private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless";
  private static final Log logger = LogFactory.getLog(SpringApplication.class);
  //SpringApplicationShutdownHook是一个实现了Runnable接口的类,用于在应用关闭时执行一些清理操作。
  static final SpringApplicationShutdownHook shutdownHook = new SpringApplicationShutdownHook();
  private static final ThreadLocal<SpringApplicationHook> applicationHook = new ThreadLocal<>();
  //一个Set<Class<?>>类型的集合,用于存储主配置源类,也就是我上面代码里的SpringTestApplication.class
  private final Set<Class<?>> primarySources;
  private Set<String> sources = new LinkedHashSet<>();
  //使用了java9的新功能StackWalker,来推断main函数所在类
  //旧实现:http://qclog.cn/1133
  private Class<?> mainApplicationClass;
  //一个Banner.Mode类型的枚举,用于设置是否显示banner和显示方式(控制台、日志或者关闭)
  private Banner.Mode bannerMode = Banner.Mode.CONSOLE;
  private boolean logStartupInfo = true;
  //一个boolean类型的变量,用于设置是否将命令行参数添加到Environment对象中
  private boolean addCommandLineProperties = true;
  //一个boolean,用于判断是否 提供用于访问和自定义将属性值从一种类型转换为另一种类型时使用的ConversionService的工具。
  private boolean addConversionService = true;
  private Banner banner;
  //用于加载资源文件
  private ResourceLoader resourceLoader;
  //一个BeanNameGenerator类型的变量,用于为Spring容器中注册的Bean生成名称
  private BeanNameGenerator beanNameGenerator;
  private ConfigurableEnvironment environment;
  //一个WebApplicationType类型的枚举,用于设置应用的类型(Servlet、Reactive或者None)
  private WebApplicationType webApplicationType;
  //一个boolean类型的变量,用于设置是否以无头模式运行应用(即不依赖图形用户界面)
  private boolean headless = true;
  private boolean registerShutdownHook = true;
  //一个ApplicationContextInitializer类型的列表,用于在创建ApplicationContext对象之前对其进行初始化操作,初始化SpringApplication时就会加载好
  private List<ApplicationContextInitializer<?>> initializers;
  //一个ApplicationListener类型的列表,用于监听run方法执行过程中各个阶段发生的事件,初始化SpringApplication时就会加载好
  private List<ApplicationListener<?>> listeners;
  private Map<String, Object> defaultProperties;
  //一个BootstrapRegistryInitializer类型的列表,通过Initialize的方法来加载BootstrapRegistry的。
  private final List<BootstrapRegistryInitializer> bootstrapRegistryInitializers;
  //通过这个参数激活 Profile
  private Set<String> additionalProfiles = Collections.emptySet();
  //设置是否应允许通过注册与现有定义同名的定义来覆盖 Bean 定义。默认为 {@code false}
  private boolean allowBeanDefinitionOverriding;
  //设置是否允许 Bean 之间的循环引用并自动尝试解析它们。默认为 {@code false}
  private boolean allowCircularReferences;
  private boolean isCustomEnvironment = false;
  //一个boolean类型的变量,用于设置是否延迟初始化Bean(即在需要时才创建Bean实例)
  private boolean lazyInitialization = false;
  private String environmentPrefix;
  private ApplicationContextFactory applicationContextFactory = ApplicationContextFactory.DEFAULT;
  //一个ApplicationStartup类型的变量,用于记录应用启动过程中的事件和时间戳
  private ApplicationStartup applicationStartup = ApplicationStartup.DEFAULT;
相关文章
|
8月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
8月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2773 0
|
10月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1362 0
|
7月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
595 4
|
7月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
727 2
|
10月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
Java
记一次springboot版本升级问题
spring-boot-starter-parent 2.6.6
1434 0
记一次springboot版本升级问题
|
7月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。