目录
pom.xml
- 父项目中点进去会发现,还有一个父依赖,spring-boot-dependencies:核心依赖
- SpringBoot的版本控制中心
- 以后导入依赖默认是不需要写版本的,但是,如果导入的包没有在依赖中管理,就需要手动配置版本。
启动器 spring-boot-starter
- spring-boot-starter-xxx:就是SpringBoot的场景启动器。
- 比如 spring-boot-starter-web ,帮我们导入了web模块正常运行所依赖的组件。
- SpringBoot 将所有的功能常见都抽取出来,做成一个个的starter(启动器),只需要在项目中引入这些starter,所有相关依赖都会导入进来。我们要用什么功能就导入什么样的场景启动器即可。
主启动类
@SpringBootApplication //使用此注解说明这是一个SpringBoo应用
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
@SpringBootApplication
标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用。
进入这个注解:
@org.springframework.boot.SpringBootConfiguration
@org.springframework.boot.autoconfigure.EnableAutoConfiguration
@org.springframework.context.annotation.ComponentScan
@ComponentScan
这个注解对应XML配置中的元素;
自动扫描并加载符合条件的组件或bean,将这个bean定义加载到IOC容器中。
@SpringBootConfiguration
标注在某个类上,表示这是SpringBoot的配置类。
@org.springframework.boot.SpringBootConfiguration —>
@org.springframework.context.annotation.Configuration ->
@org.springframework.stereotype.Component
点进去的 @Configuration 说明这是一个配置类,配置类就是对应Spring的xml配置文件;
再点进去 @Component ,这就说明,启动类本身也是Spring 中的一个组件,负责启动应用。
@EnableAutoConfiguration
@org.springframework.boot.autoconfigure.AutoConfigurationPackage
@org.springframework.context.annotation.Import({org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
...
该注解,开启自动配置功能,也就是告诉SpringBoot开启自动配置功能,使用了该注解自动配置才能生效。
以前需要自己配置的东西,现在SpringBoot帮我们配置。
1.点进去 @AutoConfigurationPackage :自动配置包
@org.springframework.context.annotation.Import({org.springframework.boot.autoconfigure.AutoConfigurationPackages.Registrar.class})
public @interface AutoConfigurationPackage {
}
@Import Spring底层注解,给容器中导入一个组件。
Registrar.class : 将主启动类的所在包及 包下面所有子包里面的组件扫描到Spring容器。
2.点进去 @Import({.AutoConfigurationImportSelector.class}) 给容器导入组件
AutoConfigurationImportSelector 自动配置导入选择器
spring.factories
打开spring.factories 可以看到很多配置文件,这里就是自动配置的根源。
在这些自动配置类中我们可以打开一个,例如 WebMvcAutoConfiguration,
可以看到里面都是JavaConfig配置类,还注入了一些bean。
结论
- SpringBoot在启动的时候,从类路径下的META-INF/spring.factories 中获取EnableAutoConfiguration 指定的值。
- 将这些值作为自动配置类导入容器,自动配置类就生效,开始自动配置工作。
SpringApplication
这个类主要做了一下四件事情:
- 推断应用的类型是普通的项目还是web项目
- 查找并加载所有可能初始化器,设置到initializers属性中
- 找出所有的应用程序监听器,设置到listeners属性中
- 推断并设置main方法的定义类,找到运行的主类
本文参考自狂神说。