原理
关于依赖
spring-boot-dependencies.xml
中配置了大量的核心依赖,并且控制了版本号
spring-boot-dependencies
是项目的父工程的父工程,点击pom.xml的parent标签中的artifactId
就能看到
我们在引入一些依赖的时候,不需要指定版本,就是因为有版本仓库
spring-boot-starter
为前缀的依赖是启动器,简单说就是Springboot的启动场景
比如 spring-boot-starter-web
,他就会帮我们自动导入web环境所有的依赖
springboot会将所有的功能场景,都变成一个个的启动器
需要使用什么功能,只需要找到对应的启动器就可以了
@SpringBootApplication
注解
SpringApplication.run()
方法
SpringApplication.run()
方法开启了一个服务,该方法返回了ConfigurableApplicationContext对象
这个类主要做了四个事情
- 根据启动器推断应用的类型是普通的项目还是Web项目
因为不是web项目的话运行后就停了
查找并加载所有可用初始化器 , 设置到initializers属性中
找出所有的应用程序监听器,设置到listeners属性中
推断并设置main方法的定义类,找到运行的主类
图解
配置文件
SpringBoot配置文件里面可以配置的东西去官网上找
官网建议使用yaml的风格进行配置
.yaml
的格式和.properties
的不同,.yaml
的格式是父子级的形式
key=value
key: value
注意yaml的冒号和value中间有个空格
yaml的强大之处在于可以给的实体类赋值
不同位置的配置文件
配置文件可以放在这四个地方,优先级如下图所示
配置文件和spring.factories之间的联系
根据当前不同的条件判断,决定这个配置类是否生效!
一但这个配置类生效;这个配置类就会给容器中添加各种组件;
这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;
配置文件能配置什么就可以参照某个功能对应的这个属性类
SpringBoot启动会加载大量的自动配置类
看需要的功能有没有在SpringBoot默认写好的自动配置类当中;
再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类;给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
可以通过启用 debug=true 属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效;
开启springboot的调试类,在配置文件中写
debug=true
Positive matches:(自动配置类启用的:正匹配)
Negative matches:(没有启动,没有匹配成功的自动配置类:负匹配)
Unconditional classes: (没有条件的类)