SpringBoot启动加载过程
⽂章⽬录
1. 启动类
Spring Boot通常有⼀个名为*Application的⼊⼝类,在⼊⼝类⾥有⼀个main⽅法,这个main⽅法其实就是⼀个标准的java应⽤的⼊⼝⽅法。在main⽅法中使⽤SpringApplication.run⽅法启动SpringBoot应⽤项⽬。
@SpringBootApplication
@SpringBootApplication是Spring Boot的核⼼注解。它是⼀个组合注解,包含了⼀下三个注解:
@Configuration
@EnableAutoConfiguration
@ComponentScan
如果不使⽤@SpringBootApplication注解,直接使⽤@Configuration、@EnableAutoConfiguration、
@ComponentScan也能达到相同效果。
1. @Configuration
是做类似于spring xml ⼯作的注解,标注在类上,类似与以前的**.xml配置⽂件。
2. @EnableAutoConfiguration
springboot⾃动配置时需要的注解,会让Spring Boot根据类路径中的jar包依赖为当前项⽬进⾏⾃动配置。同时,它也是⼀个组合注解,包含:
@Import
@AutoConfigurationPackage
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public@interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY ="ableautoconfiguration";
Class<?>[]exclude()default{};
String[]excludeName()default{};
}
其中@Import注解导⼊了EnableAutoConfigurationImportSelector类,这类就是⾃动配置关键。⾃动配置是SpringBoot的⼀⼤特⾊:⾃动配置举例:
创建并构造SpringApplication对象
调⽤SpringApplication对象的run⽅法
3.1 创建并构造SpringApplication对象
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources){ // 初始化资源加载器,默认为null
// 断⾔主要加载资源类不能为空
// 初始化主要资源加载类集合并去重
this.primarySources =new LinkedHashSet<>(Arrays.asList(primarySources));
// 得到当前WEB应⽤类型
this.webApplicationType = WebApplicationType.deduceFromClasspath();
// 设置应⽤上下⽂初始化器并去重
setInitializers((Collection)getSpringFactoriesInstances(ApplicationContextInitializer.class)); // 设置并去重
spring boot是啥setListeners((Collection)getSpringFactoriesInstances(ApplicationListener.class));
// 得到主应⽤程序启动类
this.mainApplicationClass =deduceMainApplicationClass();
}
1. 初始化资源加载器
默认为null
2. 初始化主要资源加载类集合并去重
3. 得到当前WEB应⽤类型
⼀共有三种类型:NONE、SERVLET、REACTIVE
4. 设置应⽤上下⽂初始化器
5. 设置
从"META-INF/spring.factories"⽂件读取key为ApplicationListener的实例名称集合并去重(共有11个)6. 得到主应⽤程序启动类

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。