图解SpringApplication.run方法执行流程
程序员文章站
2022-05-19 19:19:04
...
本文基于spring boot 2.2.0 release版本
下图是SpringApplication.run()的整个启动流程,对于监听器的调用没有展开介绍。
下面是关于SpringApplication类中所有属性及其作用的介绍:
//下面两个属性合起来作为加载bean的资源,spring boot扫描这些资源创建BeanDefinition并注册到容器,
//primarySources是Class对象集合,一般是将启动类作为primarySources,spring boot将Class对象转换为BeanDefinition注册到容器(只要不是匿名内部类都可以注册到容器中),sources集合可以包括xml文件路径、全限定类名、包名等
private Set<Class<?>> primarySources;
private Set<String> sources = new LinkedHashSet<>();
//记录main方法所在的Class对象,spring检查堆栈中方法名是否等于main
private Class<?> mainApplicationClass;
//是否打印系统标志,或者说是logo,有三个值:OFF,CONSOLE,LOG
//OFF是不打印,CONSOLE打印到控制台,LOG打印到日志文件
private Banner.Mode bannerMode = Banner.Mode.CONSOLE;
//是否打印spring启动日志,默认打印
//打印的内容包括:PID,主机信息,版本,profile
private boolean logStartupInfo = true;
//是否将启动命令中的参数添加到应用系统属性集合中
private boolean addCommandLineProperties = true;
//是否加载转换器,转换器用于将属性从一个类型变换为另一个类型,默认加载
private boolean addConversionService = true;
//自定义打印banner的类,如果在spring.banner.image.location路径下找到了banner文件,便不使用下面的Banner,如果找不到则使用下面的Banner打印
private Banner banner;
//用于加载资源文件
private ResourceLoader resourceLoader;
//如果没有定义bean对象名字,使用下面的对象创建一个名字,默认是类名首字母小写
private BeanNameGenerator beanNameGenerator;
//应用环境对象,可以对应用对一些特殊的配置
//该对象持有MutablePropertySources,表示配置源集合,内含有多个数据源PropertySource,数据源可以是文件、系统参数、环境变量
private ConfigurableEnvironment environment;
//记录ApplicationContext的实现类,有三个类可选:
//AnnotationConfigServletWebServerApplicationContext,AnnotationConfigReactiveWebServerApplicationContext,AnnotationConfigApplicationContext。前两个用在web环境下
private Class<? extends ConfigurableApplicationContext> applicationContextClass;
//如果应用是web应用,该属性记录web应用类型,可以是servlet、reactive、none
private WebApplicationType webApplicationType;
//设置java.awt.headless的值,设置系统是否是无头模式
private boolean headless = true;
//是否注册容器关闭钩子,默认为true
private boolean registerShutdownHook = true;
//记录ApplicationContextInitializer实例集合
private List<ApplicationContextInitializer<?>> initializers;
//记录ApplicationListener实例集合
private List<ApplicationListener<?>> listeners;
//设置系统中使用的属性
private Map<String, Object> defaultProperties;
//设置应用使用的profile,也可以通过spring.profiles.active参数设置,如果两个地方都设置,会同时生效
private Set<String> additionalProfiles = new HashSet<>();
//是否允许有相同id的bean对象,默认是false,如果有两个id一样的bean,spring oot启动时抛出异常
//spring boot一般使用注解,创建bean对象的方法名作为其id,所以如果设置为false,意味着应用中不能有两个方法名一样且有@Bean注解的方法,如果设置为true,则后者覆盖前者
private boolean allowBeanDefinitionOverriding;
//表示是否自定义了Environment对象,如果调用了setEnvironment方法,该值变为true
private boolean isCustomEnvironment = false;
//该属性设置为true后,spring boot向容器中添加LazyInitializationBeanFactoryPostProcessor,该处理器将容器中所有bean的lazyInit为null的设置为true,延迟bean对象的加载,加快应用启动速度
private boolean lazyInitialization = false;
上一篇: laravel 定时任务
下一篇: 双子男吵架会说分手么?