springboot总结
SPI: service provider interface 服务发现,从配置文件发现服务
SPI的核心思想: 服务的动态提供
目的: 加载一个外部文件,加载第三方jar。外部文件是无限扩展的。
spring boot通过SPI加载配置文件(META-INF/spring.factories,文件里面的内容 key:value)的方式,把类加载到spring容器完成实例化
tomcat的SPI: META-INF/services/javax.servlet.ServletContainerInitalizer
spintboot:
1. springboot的启动
AnnotationConfigServletWebServerApplicationContext
1.1 spring容器的启动: 调用了核心方法refresh()
1.2 内置Tomcat的启动和部署: 钩子方法onRefresh:
2.springboot的自动配置
目的: 第三方包不能扫描到;常用功能AOP, MVC, Cache...自动加进来
实现技术: SPI
@EnableAutoConfiguration
1. SPI 类的收集
Import AutoConfigurationImportSelector:
process(): 收集META-INF/spring.factories里key为@EnableAutoConfiguration的所有value的类
selectImpport(): 过滤,排序
2. ConfigurationClassPostProcessor 类只是把收集到的类变成beanDefinition
并加入到spring 容器
3.自定义starter
1. 有一个自动配置的工程: 一般都是公用功能的封装 META-INF/spring.factories
2. pom工程: 负责去导入公用功能的工程