更多Spring文章,歡迎點擊 一灰灰Blog-Spring專題html
前面一篇介紹了Bean的經常使用姿式,在一個項目中,可能不會出現什麼問題,可若是你提供了一個Jar包供第三方用戶使用,那麼你這個jar包中的Bean,能被第三方加載麼?java
本篇博文將主要介紹AutoConfig相關的內容,即若是我想提供一個jar包供第三方在Spring的環境下使用時,能夠怎麼作git
<!-- more -->github
一般來說,要想實現上面的場景,建議是藉助@Configuration
註解的配置類來管理你本身的bean,這樣對於其餘使用方而言,只須要加載到你的配置類,就能夠註冊你的全部bean了redis
首先是在你的工程中定義一個配置類,以下spring
@Configuration @ComponentScan("com.git.hui.boot.autoconfig") public class SelfAutoConfig { }
這個配置類功能比較簡單,指明掃描的包路徑,而後這個配置類如何給使用方使用呢?app
將配置放在指定的文件中便可,使用者會自動加載,從而避免的代碼的侵入框架
spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.git.hui.boot.autoconfig.SelfAutoConfig
說明,若是須要換行時,能夠以下spring-boot
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.git.hui.boot.autoconfig.SelfAutoConfig,` com.git.hui.boot.autoconfig.SelfAutoConfig2,`
而後使用方就能夠愉快的使用你的bean了,定義一個測試的Bean以下學習
@Slf4j @Component public class AutoBean { private String name; public AutoBean() { this("defaultAutoBean"); } public AutoBean(String name) { this.name = name; log.info("AutoBean load time: {}", System.currentTimeMillis()); } public String getName() { return name; } }
直接在Config配置中,定義Bean,能夠說是更加常見的方式,特別是當你的bean不是那麼多的時候,推薦使用這種方式,便於集中管理
@Slf4j public class AutoConfBean { private String name; public AutoConfBean(String name) { this.name = name; log.info("AutoConfBean load time: {}", System.currentTimeMillis()); } public String getName() { return name; } }
對應的配置類
@Configuration @ComponentScan("com.git.hui.boot.autoconfig") public class SelfAutoConfig { @Bean public AutoConfBean autoConfBean() { return new AutoConfBean("auto load + " + System.currentTimeMillis()); } }
在新工程中,測試前面的工程的bean,看是否能夠正常加載,這一小結結合源碼運行查看,更有助於理解
源碼工程說明
測試代碼以下,已刪除無關的內容
@RestController public class DemoController { /** * 測試引入第三方包的狀況 */ @Autowired private AutoBean autoBean; @Autowired private AutoConfBean autoConfBean; @GetMapping(path = "/show") public String show(String name) { Map<String, String> map = new HashMap<>(4); // ... map.put("auto", autoBean != null ? autoBean.getName() : "null"); map.put("autoConf", autoConfBean != null ? autoConfBean.getName() : "null"); return JSON.toJSONString(map); } }
演示圖以下:
本篇的內容比較簡單,東西也很少,主要就是在本身的項目中添加一個Configuration
配置類,而後在資源目錄下新增 META-INF/spring.factories
便可
上面這麼作,其實和Java自己的SPI機制有點像,都是講一些類信息寫在約定的文件中,而後由框架層來獲取文件中的內容而後進行解析,後面在源碼篇,會涉及到整個處理流程;如今知道大體是這麼玩的就行
從簡單的使用來說,上面能夠知足通常場景,可是實際的應用中,還有其餘的問題
一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
一灰灰blog
知識星球