SpringApplication 类是 Spring Boot 应用启动的核心类之一,包含了大量的属性,控制着应用启动的各个方面。这些属性涵盖了从配置环境、应用上下文类型、Banner 显示、启动日志、事件监听等多个方面。以下是 SpringApplication 类中重要属性的详细说明及其用途:
- 静态属性
DEFAULT_CONTEXT_CLASS
public static final String DEFAULT_CONTEXT_CLASS = "org.springframework.context.annotation.AnnotationConfigApplicationContext";
描述:该属性指定了默认的应用上下文类型,当应用在非 Web 环境下启动时使用。
用途:Spring Boot 在非 Web 环境下(如控制台应用)默认使用 AnnotationConfigApplicationContext,这是 Spring 中的一个基于注解的应用上下文实现。
DEFAULT_SERVLET_WEB_CONTEXT_CLASS
public static final String DEFAULT_SERVLET_WEB_CONTEXT_CLASS = "org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext";
描述:该属性指定了默认的应用上下文类型,当应用在传统的 Servlet Web 环境下启动时使用。
用途:在 Servlet 环境下,Spring Boot 默认使用 AnnotationConfigServletWebServerApplicationContext,它支持嵌入式 Web 服务器(如 Tomcat、Jetty 等)和基于注解的配置。
DEFAULT_REACTIVE_WEB_CONTEXT_CLASS
public static final String DEFAULT_REACTIVE_WEB_CONTEXT_CLASS = "org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext";
描述:该属性指定了默认的应用上下文类型,当应用在响应式 Web 环境下启动时使用。
用途:在响应式 Web 环境下,Spring Boot 使用 AnnotationConfigReactiveWebServerApplicationContext 来支持 WebFlux 等响应式编程模型。
BANNER_LOCATION_PROPERTY_VALUE
public static final String BANNER_LOCATION_PROPERTY_VALUE = SpringApplicationBannerPrinter.DEFAULT_BANNER_LOCATION;
描述:指定了 Banner 的默认位置,即 Banner 文件的路径。
用途:这个属性指定了启动时显示 Banner 的位置,默认指向 SpringApplicationBannerPrinter.DEFAULT_BANNER_LOCATION,即通过 SpringApplication 打印出来的 ASCII 风格 Banner。
BANNER_LOCATION_PROPERTY
public static final String BANNER_LOCATION_PROPERTY = SpringApplicationBannerPrinter.BANNER_LOCATION_PROPERTY;
描述:Banner 位置的属性键,允许通过配置文件或命令行参数设置 Banner 的位置。
用途:此属性是 Banner 位置的配置项,Spring Boot 允许在启动时通过 spring.banner.location 设置 Banner 文件的位置。
SYSTEM_PROPERTY_JAVA_AWT_HEADLESS
private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless";
描述:该属性用于指定 Java 环境是否在 headless 模式下运行。
用途:headless 模式通常用于没有图形用户界面的环境中(如服务器),Spring Boot 启动时可能会根据该属性来配置应用环境。
logger
private static final Log logger = LogFactory.getLog(SpringApplication.class);
描述:用于记录 SpringApplication 类的日志实例。
用途:用于输出日志,通常会用于输出启动信息和调试信息。
- 实例属性
primarySources
private Set<Class<?>> primarySources;
描述:该属性存储应用启动的主要源类。
用途:主要源类通常是标注了 @SpringBootApplication 或 @Configuration 的类,Spring Boot 启动时会从这些类开始初始化 Spring 容器。
sources
private Set<String> sources = new LinkedHashSet<>();
描述:存储从启动类中指定的源(通常是配置类或主应用类)。
用途:sources 用于存储应用启动时的类路径资源,它会影响到 Spring 环境和上下文的初始化。
mainApplicationClass
private Class<?> mainApplicationClass;
描述:存储 Spring Boot 应用的主类。
用途:用于确定应用的主类,通常是被 @SpringBootApplication 注解的类。它是启动过程中最初的类,指示应用的入口。
bannerMode
private Banner.Mode bannerMode = Banner.Mode.CONSOLE;
描述:控制 Banner 显示的模式。
用途:Banner.Mode.CONSOLE 表示在控制台显示 Banner,Banner.Mode.OFF 表示不显示 Banner,Banner.Mode.LOG 表示将 Banner 输出到日志中。
logStartupInfo
private boolean logStartupInfo = true;
描述:控制是否记录应用启动时的日志信息。
用途:如果为 true,Spring Boot 在启动时会打印详细的启动信息;如果为 false,则不会打印。
addCommandLineProperties
private boolean addCommandLineProperties = true;
描述:控制是否将命令行参数添加到 Spring 环境中。
用途:如果为 true,Spring Boot 会将命令行中的参数(如 --key=value)添加到应用的环境中。可以用于配置覆盖。
addConversionService
private boolean addConversionService = true;
描述:控制是否添加 Spring 类型转换服务。
用途:如果为 true,Spring Boot 会在应用启动时自动添加类型转换器,支持将配置属性自动转换为 Java 类型。
banner
private Banner banner;
描述:自定义的 Banner 实例。
用途:允许开发者提供自定义的 Banner。如果设置为 null,则使用默认 Banner。你可以通过 setBanner() 方法设置自定义 Banner。
resourceLoader
private ResourceLoader resourceLoader;
描述:应用的资源加载器。
用途:Spring Boot 使用 resourceLoader 加载应用中的资源(如文件、配置文件等),它是 Spring 中资源加载机制的一部分。
beanNameGenerator
private BeanNameGenerator beanNameGenerator;
描述:用于生成 Bean 名称的生成器。
用途:在 Spring 容器中注册 Bean 时,beanNameGenerator 用于生成 Bean 的名称。
environment
private ConfigurableEnvironment environment;
描述:应用的环境实例,提供访问系统环境变量、配置属性等信息的能力。
用途:environment 用于存储与应用相关的环境配置(如 application.properties 或 application.yml),并可以在启动过程中对其进行修改。
applicationContextClass
private Class<? extends ConfigurableApplicationContext> applicationContextClass;
描述:指定应用使用的上下文类。
用途:允许开发者自定义应用上下文的类型。比如,可以设置为 AnnotationConfigApplicationContext 或 GenericWebApplicationContext 等。
webApplicationType
private WebApplicationType webApplicationType;
描述:确定应用是否为 Web 应用,及其类型。
用途:根据该属性,Spring Boot 会决定是否需要启动嵌入式 Web 服务器,并且选择合适的应用上下文类型。常见的有 WebApplicationType.SERVLET 和 WebApplicationType.REACTIVE。
headless
private boolean headless = true;
描述:决定应用是否在 headless 模式下运行。
用途:如果为 true,表示应用在没有图形界面的环境中运行,通常在服务器环境中会设置为 true。
registerShutdownHook
private boolean registerShutdownHook = true;
描述:决定是否注册 JVM 关闭钩子。
用途:如果为 true,Spring Boot 会在 JVM 关闭时自动关闭 Spring 上下文。适用于希望在应用关闭时清理资源的场景。
initializers
private List<ApplicationContextInitializer<?>> initializers;
描述:应用上下文的初始化器。
用途:initializers 列表中可以添加自定义的 ApplicationContextInitializer,它们会在 Spring 环境初始化之前执行,用于配置和定制上下文。
listeners
private List<ApplicationListener<?>> listeners;
描述:应用事件的监听器。
用途:listeners 用于存储应用启动过程中的事件监听器,例如监听环境事件、应用上下文事件等。
defaultProperties
private Map<String, Object> defaultProperties;
描述:存储 Spring Boot 启动时使用的默认配置属性。
用途:defaultProperties 用于存储应用启动时默认的配置参数。它允许开发者通过编程方式设置一些默认的配置项,例如 application.properties 或 application.yml 中的配置。如果没有通过配置文件或环境变量提供这些属性,它们将作为默认值使用。
additionalProfiles
private Set<String> additionalProfiles = new HashSet<>();
描述:存储应用启动时附加的 profiles(配置文件)。
用途:additionalProfiles 可以包含额外的配置文件(spring.profiles.active)的 profiles。通过设置不同的 profiles,Spring Boot 可以根据不同环境加载不同的配置文件。开发者可以通过该属性指定其他的 profiles,用于调整应用的配置。
allowBeanDefinitionOverriding
private boolean allowBeanDefinitionOverriding;
描述:控制是否允许覆盖 Bean 定义。
用途:如果设置为 true,允许同一类型的多个 Bean 定义之间发生覆盖。在某些场景下(如测试或多模块项目),可能需要覆盖现有的 Bean 定义。默认情况下,Spring 会阻止同一类型的 Bean 被多次定义。
isCustomEnvironment
private boolean isCustomEnvironment = false;
描述:标记是否使用了自定义的 ConfigurableEnvironment。
用途:如果设置为 true,说明启动过程中应用使用了自定义的环境配置(比如自定义的 Environment 实现类)。这对于一些复杂的配置场景是非常有用的,尤其是在需要完全自定义 Spring 环境时。
lazyInitialization
private boolean lazyInitialization = false;
描述:控制 Spring Boot 是否启用懒加载。
用途:如果为 true,Spring Boot 将启用懒加载模式,即 Bean 将在需要时才被初始化,而不是在应用启动时就被立即加载。懒加载可以提高应用的启动速度,但可能导致某些 Bean 在使用时延迟加载。
总结
- 应用上下文类型:DEFAULT_CONTEXT_CLASS、DEFAULT_SERVLET_WEB_CONTEXT_CLASS 和 DEFAULT_REACTIVE_WEB_CONTEXT_CLASS 决定了应用启动时使用的上下文类型,分别适用于非 Web 环境、Servlet Web 环境和响应式 Web 环境。
- Banner 配置:BANNER_LOCATION_PROPERTY_VALUE 和 BANNER_LOCATION_PROPERTY 允许开发者定制应用启动时显示的 Banner 信息。
- 环境配置:environment、isCustomEnvironment 和 defaultProperties 控制了 Spring 应用的环境,提供了对环境变量和配置文件的管理。Web 应用类型:webApplicationType 决定应用是 Servlet Web 应用还是响应式 Web 应用,或者是非 Web 应用。
- 应用启动日志:logStartupInfo 控制是否记录启动信息,bannerMode 控制 Banner 显示的模式。
- 命令行参数和转换服务:addCommandLineProperties 和 addConversionService 提供了对命令行参数和类型转换的支持。
- 应用上下文初始化和事件监听:initializers 和 listeners 控制了 Spring 应用启动过程中的初始化器和事件监听器,允许开发者在启动过程中插入自定义的逻辑。
- 其他配置:lazyInitialization 控制是否启用懒加载,allowBeanDefinitionOverriding 控制是否允许 Bean 定义的覆盖,additionalProfiles 可以用于指定额外的配置文件或环境。