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的配置項,下一節我們來分析自動配置的加載流程