因為如果是公共的模塊(base-common)里面的一些配置,比如對數據源的配置,雖然別的服務模塊依賴公共模塊,但是在別的服務啟動的時候並不會掃描到base-common下的組件。
案例:
//新建一個Test類 public class Test { public Test() { System.out.println("Test加載"); } }
如果我們要想將這個Test類注入到IOC中,以前的方式只能寫到啟動類的包下面,或者在啟動類中加上@ComponentScan(包名)
現在我們可以使用spring.factories來解決這個問題,在resources下面創建文件夾META-INF,再創建一個文件spring.factories
編輯spring.factories文件並寫入配置
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.test.Test
配置原理
SpringFactoriesLoader載荷從和實例化給定類型的工廠“META-INF / spring.factories”文件,其可存在於在類路徑多個JAR文件。
該spring.factories文件必須為Properties格式,其中的關鍵是接口或抽象類的完全合格的名稱和值是一個逗號分隔的實現類名的列表。
如:example.MyService=example.MyServiceImpl1,example.MyServiceImpl2。其中example.MyService是接口的名稱,和MyServiceImpl1和MyServiceImpl2兩種實現。