分析基於spring boot 2.0.5版本。

開發spring boot程序時,都會從下圖的這樣一個類開始啟動應用。那spring boot內部是如何做到如此方便快捷的呢?本文先從啟動類的註解開始分析。

查看SpringBootApplication,可以看出其最終是由ComponentScan,EnableAutoConfiguration,SpringBootConfiguration三個註解組合而成。

1. ComponentScan

註解ComponentScan的功能是自動掃描並載入符合條件的組件,然後將其載入到Bean容器中。

可以通過basePackages屬性指定掃描範圍。默認全部掃描,所以要將spring boot的啟動類放到根代碼包下。

例如:

自定義的服務類UserService,用@Service註解,如果沒有@ComponentScan註解,則spring容器不會載入此UserService,也就是在程序中調用UserService的示例方法會報空指針。

2. SpringBootConfiguration

SpringBootConfiguration註解的本質實際為Configuration註解,二者功能也一致。它是用JavaConfig形式的配置替代xml配置。spring boot社區也推薦使用這種配置方式。

其中用@Bean註解的方法,spring會將其載入到spring容器中,並且實例名就是方法名。

3. EnableAutoConfiguration

EnableAutoConfiguration註解是藉助@Import的幫助,將所有符合自動配置條件的bean定義載入到spring容器。

例如:

在項目的maven依賴中加入redis的pom依賴,則在項目裏無需做任何引入,啟動以後,spring容器中都會有redis。

EnableAutoConfiguration註解的實現過程為:

通過AutoConfigurationImportSelector,繼承ImportSelector介面,在selectImports方法中,利用SpringFactoriesLoader來讀取META-INF/spring.factories文件的配置。

如果需要自定義自動載入的Bean,則只需在項目下新建META-INF文件夾,然後新建spring.factories文件,配置org.springframework.boot.autoconfigure.EnableAutoConfiguration即可。

如果要關掉此功能,則需在配置文件中將spring.boot.enableautoconfiguration屬性修改為false即可。

—END—

一言良語,字字珠璣。
微信公眾號:一言良語(asmartwords)

推薦閱讀

相關文章:

《區塊鏈從入門到放棄》先從一個故事說起

《區塊鏈從入門到放棄》比特幣和區塊鏈基礎介紹

《區塊鏈從入門到放棄》區塊鏈的共識機制——工作量證明、權益證明、委託權益證明

《區塊鏈從入門到放棄》拜占庭容錯演算法

《區塊鏈從入門到放棄》51%攻擊和雙花問題

你可能喜歡:

spring cloud源碼分析——ribbon負載均衡策略

利用Axure中繼器實現添加刪除商品原型

人工智慧寫代碼?放心,Sketch2Code幹不過前端開發

關於Java資料庫連接池最通俗易懂的介紹


推薦閱讀:
相關文章