springboot中的starter使用解析
springboot中的starter
平時(shí)spring boot項(xiàng)目使用mybatis的可能很大概念都會(huì)見到引入依賴
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>xx.xx.xx</version> </dependency>
或者有時(shí)我們也會(huì)引入一些自己項(xiàng)目基礎(chǔ)組件的starter依賴,有時(shí)不明白原理的可以就比較迷茫,主要是引入了starter依賴之后,基礎(chǔ)組件就可以像在spring的bean一樣在項(xiàng)目中使用,那其實(shí)只要找到在哪里加載了這些bean就明白了。
因?yàn)閙ybatis-spring-boot-starter里還依賴了一些跟mybatis相關(guān)的依賴,如下:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> </dependencies>
仔細(xì)看有依賴包mybatis-spring-boot-autoconfigure,這里就是真正加載bean的,
包里有文件META-INF/spring.factories
,內(nèi)容:
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration,\ org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
繼續(xù)看看兩個(gè)類
@org.springframework.context.annotation.Configuration @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class }) @ConditionalOnSingleCandidate(DataSource.class) @EnableConfigurationProperties(MybatisProperties.class) @AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class }) public class MybatisAutoConfiguration implements InitializingBean { //... }
@Configuration @ConditionalOnClass(LanguageDriver.class) public class MybatisLanguageDriverAutoConfiguration { //... }
這里已經(jīng)比較明朗了,平時(shí)我們使用spring boot定義bean時(shí)都會(huì)寫@Configuration
修飾的類里去注冊(cè)bean到spring容器里的,所以starter主要就是在META-INF/spring.factories
文件指定好bean注冊(cè)類,讓spring容器啟動(dòng)時(shí)去掃描注冊(cè)bean就可以了。 但是我們?cè)陧?xiàng)目里@Configuration
注冊(cè)的bean可以,而依賴包里的就要額外加上META-INF/spring.factories
來指定注冊(cè)類,因?yàn)閟pring默認(rèn)只會(huì)掃描當(dāng)前項(xiàng)目里的@Configuration
類,所以需要加上META-INF/spring.factories
來指定注冊(cè)類,這樣spring可以額外掃描依賴包里的注冊(cè)bean,其實(shí)就是使用了類似SPI機(jī)制,可以讓使用者可以自行擴(kuò)展實(shí)現(xiàn)類。
到此這篇關(guān)于springboot中的starter使用解析的文章就介紹到這了,更多相關(guān)springboot中的starter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決
本文主要介紹了Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05解決JAVA遍歷List集合,刪除數(shù)據(jù)時(shí)出現(xiàn)的問題
這篇文章主要介紹了解決JAVA遍歷List集合時(shí),刪除數(shù)據(jù)出現(xiàn)的問題,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07深入dom4j使用selectSingleNode方法報(bào)錯(cuò)分析
本篇文章是對(duì)dom4j使用selectSingleNode方法報(bào)錯(cuò)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05