springboot最重要的特性就是自动配置,许多功能不需要手动开启,会自动帮助程序员开启,如果想扩展某些
第三方组件的功能,例如mybatis,只需要配置依赖,就可以了,这其中都是需要SPI支持实现的,下面我们从源码
层面看看springboot如何通过spi机制实现自动配置的。
一:加载所有工程中META-INF/spring.factories文件中的配置
创建SpringApplication对象:
我们随便看一个工程的目录:spring-boot-autoconfigure 工程下META-INF 目录下的spring.factories文件的内容, 配置类似map ,key为某一项,value为实现集合
这就是Spi的加载机制,可以通过配置的方式实现和业务代码的解耦,需要增加时直接配置到文件内。
这一步是在容器启动的时候,加载所有的factoryname的值到缓存,包括自动配置的。
二:看一下自动配置是如何寻找并注册的
看一下这个注解@SpringBootApplication
看一下这个类的内容:类里面有获取自动配置的方法getAutoConfigrationEntry
就是从上一步缓存result中查询所有的EnableAutoConfiguration的value集合,
这一节主要分析spi机制加载spring.factories的配置项,下一节我们来分析自动配置的加载流程