start出現歷史:
SpringBoot的相對於SpringMVC的出現初衷就是無須繁瑣的配置文件就可以輕松使用自己需要的功能, 我們都知道SpringBoot你只需要引入對應的XXX-spring-boot-start. 然后寫上我們的配置屬性文件就可以直接使用對應的增強功能。
眾所周知我們都知道直接引入Start和配置相關properties文件就可以使用我們的功能,那么springBoot底層又是如何集成解決自動配置的呢~
springBoot-start原理:
@SpringBootApplication 點擊進去查看源碼。
@EnableAutoConfiguration這個注解,我們從英文字面上理解就是開啟自動配置, 我們再點擊這個注解進入源碼分析
進來后我們可以看到一個@Import的class 我們點擊進入查看相關源碼。
我們可以看到一個重要的方法 selectImports方法,我們閱讀代碼查看到調了this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
這個方法. 再跟蹤getAutoConfigurationEntry源碼
我們可以看到它調用了 getCandidateConfiguration這個方法,顧名思義就是根據調解導入相關的自動配置。這里我們就大概明白了,為什么只有引入了依賴才會使用對應的start功能。
點擊this.getCandidateConfigurations方法查看實現
我們看到它的底層調用了 SpringFactorysLoader.loadFactoryNames()這個方法。
再次點擊進去查看源碼
看到關鍵的一句話,就是
classLoader.getResources("META-INF/spring.factories"),這里我們就明白為什么我們手寫一個Start要在META-INF 下新建一個spring.factories的文件了,因為它啟動的時候會去讀取這個配置文件。
這里小編也遇到了一個面試題,首頁問我如何寫一個start。我答上來了,可是說到為什么要寫一個這樣的文件,我也知道它啟動會去加載,但是沒仔細看源碼就回答的不是很好。特意記錄一下
至此我們就大概說完了啟動加載過程,我們再看如何讀取這些配置文件的
我們可以看到springBoot自帶了 spring-boot-autoconfigure這個依賴包,正是這個包自動幫助我們來處理的,
查看spring的啟動配置 它有自己的spring.factories 我們可以看到 它有個
Auto Configure 的注解地方, 有一段配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
至此我們應該明白 我們為什么也要在 spring.factories中寫一個這樣的屬性指向我們對應的XXX-AutoConfiguration
我們再看看springBoot默認自己有的AutoConfiguration
還有JMS等等 如下圖
我們可以看到ActiveMQAutoConfiguration 對應再配置文件有指定對應的路徑,我們點這個配置類 ActiveMQAutoConfiguration
我們就可以看到它是如何讀取我們的activeMQ屬性文件中的值的。我們查看ActiveMQProperties這個類
看到此次我們似乎就明白了,只需要引入Start和配置相關的配置文件,SpringBoot就能幫助我們自動注入對應的bean提供我們直接使用了
總結:
如果手寫Start我們就可以分為大致三步了
1.新建META-INF/spring.factories的文件 里面的XXX-AutoConfig指向我們的AutoConfig
2.新建XXX-AutoConfig 在文件中實例化我們需要的Bean交給Spring管理
3.新建屬性文件 properties
編碼不易,你們的關注是我永遠堅持的動力, 感謝再看或分享的小伙伴們.
之前說滿200關注會給大家發紅包, 20天時間 就增加了100多人到達200多人了,在此感謝大家的關注和分享,有些朋友甚至還主動讓他媳婦關注了,取關的也有。但是對於這些支持的我也會給大家帶來一點小小福利,后面也會從朋友那邊拿一個小禮物,充電寶啊,手機膜發給大家
加群發50紅包給大家吧,兌現一個承若!