SpringBoot自動(dòng)化配置原理和自定義starter方式
SpringBoot自動(dòng)化配置原理和自定義starter

SpringBootConfiguration
底層是一個(gè)Configuration,表示啟動(dòng)類(lèi)也是一個(gè)配置類(lèi),可以在內(nèi)部定義相關(guān)Bean
ComponentScan
表示組件掃描,默認(rèn)會(huì)掃描啟動(dòng)類(lèi)包及子包下Spring能識(shí)別的組件
EnableAutoConfiguration
底層是一個(gè)Import注解

該注解中導(dǎo)入 AutoConfigurationImportSelector類(lèi),該類(lèi)最終實(shí)現(xiàn)了ImportSelector


該類(lèi)中有一個(gè) selectImports 方法會(huì)被調(diào)用,

selectImports()方法底層調(diào)用getAutoConfigurationEntry()方法,獲取可自動(dòng)配置的配置類(lèi)信息集合

getAutoConfigurationEntry()方法通過(guò)調(diào)用getCandidateConfigurations(annotationMetadata, attributes)方法獲取在配置文件中配置的所有自動(dòng)配置類(lèi)的集合

獲取所有基于 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置類(lèi)的集合
并篩選滿(mǎn)足starter和各種Condtional條件的全類(lèi)名,封裝成一個(gè)字符串?dāng)?shù)組加載到內(nèi)存中
啟動(dòng)類(lèi)會(huì)通過(guò)run方法去創(chuàng)建與初始化Spring容器,在初始化時(shí)會(huì)把上面注解加載到內(nèi)存中的字符串?dāng)?shù)組對(duì)應(yīng)的內(nèi)容,創(chuàng)建成對(duì)象注入到Spring容器,至此就完成了自動(dòng)化裝配
自定義starte
創(chuàng)建自定義starter模塊 方法名-spring-boot-starter(進(jìn)行依賴(lài)管理)
把所有的依賴(lài)統(tǒng)一管理起來(lái)
創(chuàng)建autoconfigure模塊 方法名-spring-boot-autoconfigure
在starter中引入autoconfigure (只需要引入starter起步依賴(lài)即可)
在autoconfigure模塊方法名-spring-boot-autoconfigure中完成自動(dòng)配置
定義一個(gè)自動(dòng)配置類(lèi),在自動(dòng)配置類(lèi)中將所要配置的bean都提前配置好
定義配置文件,把自動(dòng)配置類(lèi)的全類(lèi)名定義在配置文件(META-INF/spring/xxxx.imports)中
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot Starter自定義之創(chuàng)建可復(fù)用的自動(dòng)配置模塊方式
- springboot項(xiàng)目實(shí)現(xiàn)多數(shù)據(jù)源配置使用dynamic-datasource-spring-boot-starter的操作步驟
- SpringBoot自定義Starter與自動(dòng)配置實(shí)現(xiàn)方法詳解
- springboot配置多數(shù)據(jù)源的一款框架(dynamic-datasource-spring-boot-starter)
- SpringBoot自動(dòng)配置之自定義starter的實(shí)現(xiàn)代碼
- SpringBoot2.1.x,創(chuàng)建自己的spring-boot-starter自動(dòng)配置模塊操作
相關(guān)文章
Java如何獲取對(duì)象屬性及對(duì)應(yīng)值
這篇文章主要介紹了Java如何獲取對(duì)象屬性及對(duì)應(yīng)值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
淺析javax.servlet.Servlet,ServletContext接口
本篇文章是對(duì)javax.servlet.Servlet,ServletContext接口進(jìn)行了纖細(xì)的分析介紹,需要的朋友參考下2013-07-07
java實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
使用Java高效將CSV轉(zhuǎn)換為Excel的實(shí)現(xiàn)方法
在日常的數(shù)據(jù)處理和分析工作中,CSV文件因其輕量級(jí)和通用性而廣受歡迎,然而,當(dāng)我們需要進(jìn)行復(fù)雜的數(shù)據(jù)分析或利用Excel強(qiáng)大的圖表和公式功能時(shí),將CSV數(shù)據(jù)轉(zhuǎn)換為Excel文件就成了開(kāi)發(fā)者們常見(jiàn)的需求和痛點(diǎn),本文將深入探討如何利用Java高效地將CSV轉(zhuǎn)換為Excel2025-08-08
MyBatis連接池的深入和動(dòng)態(tài)SQL詳解
這篇文章主要介紹了MyBatis連接池的深入和動(dòng)態(tài)SQL詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
解決mybatis用Map返回的字段全變大寫(xiě)的問(wèn)題
這篇文章主要介紹了解決mybatis用Map返回的字段全變大寫(xiě)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Java編程利用socket多線(xiàn)程訪(fǎng)問(wèn)服務(wù)器文件代碼示例
這篇文章主要介紹了Java編程利用socket多線(xiàn)程訪(fǎng)問(wèn)服務(wù)器文件代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
MyBatis使用注解開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了MyBatis使用注解開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
MySQL?MyBatis?默認(rèn)插入當(dāng)前時(shí)間方式
這篇文章主要介紹了MySQL?MyBatis?默認(rèn)插入當(dāng)前時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

