pom.xml
- spring-boot-dependencies: 核心依赖在父工程组合能够
- 我们在写或者引入一些Springboot依赖的时候, 不需指定版本, 就是因为有这些版本仓库
启动器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
- 启动器: 说白了就是springboot的启动场景(可以理解特定场景的整套解决方案)
- 比如spring-boot-starter-web, 它就会帮我们自动导入web环境所有的依赖
- springboot会讲所有的功能场景, 都变成一个个的启动器
- 我们要用什么功能, 就只需要找到对应的启动器就可以了.
自动装配
// SpringBootApplication:标注这个类是一个 springboot的应用
@SpringBootApplication
public class DomeApplication {
public static void main(String[] args) {
//将 springboot应用启动
SpringApplication.run(DomeApplication.class, args);
}
}
- 注解
- @SpringBootConfiguration springboot的配置
- @Configuration spring配置类
- @Component 说明这也是一个spring的组件
- @Configuration spring配置类
- @EnableAutoConfiguration 自动配置
- @AutoConfigurationPackage 自动导入包
- @Import({Registrar.class}) 自动包配置 包注册
- @Import({AutoConfigurationImportSelector.class}) 自动配置导入选择
- @AutoConfigurationPackage 自动导入包
- @SpringBootConfiguration springboot的配置
//获取所有的配置
- List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
- 
META-INF/spring.factories 核心配置文件
如何找到META-INF/spring.factories的?
那么多自动配置为什么有的没有生效,需要导入对应的 start才能有作用?
简单来说就是需要满足核心注解:@ConditionalonXXX:的条件, 如果这里面的条件都满足,才会生效
结论: springboot所有自动配置都是在启动的时候扫描并加载, spring.factories所有的自动配置类都在这里面
但是不一定生效, 要@ConditionalonXXXaa条件成立
对应的start 启动器就是判断的条件.
1.springboot在启动的时候, 从类路径下META-INF/spring.factories 获取指定的值
2.将这些自动配置的类导入容器, 自动配置就会生效, 帮我们进行自动配置
3.以前是需要自己配置的东西, 现在springboot帮忙做
4.整合javaEE, 解决方案和自动配置的东西都在spring-boot-autoconfigure-2.0.0.RELEASE.jar包下
5.它会把所有需要导入的组件, 已类名的方式返回,这些组件就会被添加到容器.
SpringApplication
这个类主要做了以下四件事情
- 推断应用的类型是普通的项目还是Web项目
- 查找并加载所有可用初始化器, 设置到 initializers属性中
- 找出所有的应用程序监听器,设置到 Listeners属性中
- 推断并设置main方法的定义类,找到运行的主类
