SpringBoot以约定大于配置的核心思想,默认帮我们进行了很多设置,简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。
创建的包一定要在项目主程序入口的同级目录下,负责会识别不到
更改启动时显示的字符拼成的字母
?spring-boot-dependencies: 核心依赖在父工程中
我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库
比如??spring-boot-starter-web,他就会帮我们自动导入web项目所有的依赖
springboot会将所有的功能场景都变成一个个的启动器
我们要使用什么功能,就只需要找到对应的启动器就可以了,也就是一个个的starter
这个链接就是关于springboot的所有启动器
//标注这个类是一个springboot的应用
@SpringBootApplication
public class BootApplication {
public static void main(String[] args) {
//将springboot应用启动
SpringApplication.run(BootApplication.class, args);
}
}
@SpringBootConfiguration springboot的配置 启动类下的所有资源被导入 @Configuration spring配置类 ? @Component 说明这也是一个spring的组件@EnableAutoConfiguration 自动配置 ? @AutoConfigurationPackage 自动配置包 ? @Import({AutoConfigurationPackages.Registrar.class}) 自动配置包"扫描包" ? @Import({AutoConfigurationImportSelector.class}) 自动配置导入选择//获取所有的配置 List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
获取候选的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).getCandidates();
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
AutoConfigurationImportSelector
自动配置的核心配置文件
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.?
核心注解? :@ConditionalOnxxxxxx
如果条件都满足则生效
例如mvc,? 我们导入了webmvc的包则全部满足,就会生效
总结: SpringBoot所有自动配置都是在启动的时候扫描并加载
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.?
所有的自动配置类都在这里面,,但是不一定都生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有个启动器,我们的自动装配就会生效,然后就配置成功了
程序main方法执行开始加载@SpringBootApplication注解
程序加载找到@EnableAutoConfiguration注解
自动开启包扫描@AutoConfigurationPackage(加载自己的配置项)
AutoConfigurationPackages.Registrar.class 读取主启动类所在的包路径,则包扫描开始.创建/读取/主启动类的子孙包中的信息.
自动导入其他组件
AutoConfigurationImportSelector.class在 springboot-autoConfigure中读取自动配置项 142项. 根据用户自己依赖的jar包文件 开始加载组件.
如果加载组件的过程中 发现配置文件与需要的名称一致,则动态为配置项的配置文件的属性赋值 实现参数的动态修改.
如果程序运行没有错 则SpringBoot程序启动成功.