本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。
spring-boot-starter-parent
)spring-boot-starter
)springboot 的启动场景,功能场景。
添加某功能对应的启动器依赖即可使用此功能。
springboot 的依赖前缀
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
@SpringBootApplication
)@SpringBootConfiguration
:SpringBoot 配置类
@EnableAutoConfiguration
:自动装配
自动装配流程
springboot 启动时从 spring.factories 获取目标类(组件)的全限定名,将其添加到容器。
配置仓库
@ConditionalOnxxx
注解,只有满足此注解的所有条件,此配置才会生效。结论
starter
),自动装配就会生效。SpringApplication
类判断此应用是普通 Java 项目还是 Web 项目。
查找并加载所有可用的初始化器,设置到 initializers 中。
查找所有应用程序监听器,设置到 listeners 中。
推断并设置 main 方法的定义类,找到主类。
查看类构造器。
/**
* 创建一个新的 SpringApplication 实例,用于加载应用程序上下文,该实例可以在调用 run 方法
* 前自定义。
* @param resourceLoader 资源加载器
* @param primarySources bean 源
* @see #run(Class, String[])
* @see #setSources(Set)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
this.resourceLoader = resourceLoader;
Assert.notNull(primarySources, "PrimarySources must not be null");
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
this.webApplicationType = WebApplicationType.deduceFromClasspath();
this.bootstrapRegistryInitializers = getBootstrapRegistryInitializersFromSpringFactories();
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this.mainApplicationClass = deduceMainApplicationClass();
}
run()
方法启动应用监听器、获取装配环境参数等。
执行流程