(我就是個封面)html
Spring-boot自出現後,到如今火的很,你們貌似都在用,連招聘裏面也要求會這個。可是說實話,spring-boot無外乎想實現一種可插拔的編程方式,說是簡化配置,其實並無減小多少,只不過把配置落到代碼裏面,經過各類annotation來標示了。mysql
做爲我的其實不太願意團隊用spring-boot這種層層封裝的方式,各類jar鋪天蓋地,最終你們都被綁架了,本身底層的能力不必定有什麼提升。web
spring-boot的starter又是個什麼鬼?
一句話,spring-boot的starter是一個經過maven完成自包含並經過annotation配置使得可被spring上下文發現並實例化的一個可插拔的組件或服務。spring
一種是內部已經支持的,一種是第三方的。sql
內部支持starter:數據庫
其經過@ConditionalOnClass來實決定是否例化(ConditionalOnClass是指當在classpath發現須要的依賴的類時實例化),想要啓動這個服務,只要要配置上對應的starter,這個starter就能把所須要的jar給關聯上。編程
相似於咱們對log的使用,默認使用slf4j這個api接口,提供一個鉤子,classpath裏面誰實現了這個機構,誰就掛到這個鉤子上成爲log具體實現,其中log4j就是一個實現。api
經過spring的以下maven配置便可看見裏面已經經過dependencyManagement(這個時maven的依賴管理,不用的時候不會加載)給你配置好了全部內置starter。只須要用的時候把對應的starter依賴配置上就好了。tomcat
<dependency>mybatis
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId> <
/dependency>
全部的starter其實都是要經過代碼配置被上下文發現的,能夠在spring-boot-autoconfigure-xxx.jar去看,以下:。
內置的tomcat,jetty也在裏面:
具體代碼:
經過ConditionalOnClass只要發現了tomcat這個類(配置了spring-boot-starter-web的maven依賴後就會會有),就會啓動tomcat的服務。
第三方starter:
好比mybatis等。
原理是同樣的,就是在你已經實現的服務代碼之上封裝一層配置代碼就行,看看mybitis的,這是mybatis-spring-boot-starter的依賴。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
這個依賴是一個pom,點進去能夠看見自包含的依賴關係,其中一個就是mybatis的autoConfigure,經過@bean等annotation完成對mybatis的實例化配置,以下:
具體代碼:
本次實現一個簡單的數據庫操做組件,相似於mybatis,只不過只實現了簡單的查詢服務。
整個示例有兩個工程:
一個實現咱們本身的starter(取名叫spring-boot-mydao-starter),最後會打成ar包,並install到本地maven本地廠庫裏。
另一個工程用於測試,最終會依賴spring-boot-mydao-starter整個組件,並調用裏面的查詢服務去測試。
工程
具體類以下:
一、建立spring-boot-mydao-starter工程,添加相關依賴配置
咱們實現的這個組件僅僅依賴於mysql的驅動以及spring-boot的上下文環境。其中mysql驅動用的spring-boot-starter-parent裏面配置好的,這裏直接用便可,maven配置以下:
二、實現如下幾個類:
Mydao:封裝數據庫的鏈接和查詢服務,和spring沒有任何關係。
MyDaoAutoConfiguration:提供MyDao的配置用於啓動時被spring上下文發現並解析。
DbProperties:完成對數據庫配置參數文件的讀取(db.properties,固然spring-boot也支持其餘格式的配置文件,我的仍是喜歡傳統樣式)。
其中Mydao:
MyDaoAutoConfiguration(將配置參數對象傳給Mydao並配置Mydao實例):
Spring在啓動時會經過@Bean實例化Mydao並將其放入ConfigurableApplicationContext容器中。
配置文件類DbProperties:
自動讀取classpath下的db.properties的配置文件,並實例化成類對象。配置文件須要在測試的工程(test-spring-boot-mydao-starter)裏提供。
配置文件db.properties
以上就是真個starter的類容。下面描述如何使用這個starter。
新建測試工程test-spring-boot-mydao-starter(起啥名都行)。配置上對咱們的starter的依賴:
由於starter裏面已經依賴了spring-boot的上下文,因此這裏就不用配置了。
而後就是測試:
咱們用mysql自帶的數據庫裏面的user表作測試。如下是測試類,須要注入starter裏面的mydao:
而後就是啓動測試:
也能夠用spring的junit來測試。
~以上即是本次分享全部內容~
爲防止地址失效,全部下載連接都在公衆號維護,請關注公衆號後,回覆「R003」 獲取完整源碼。
擴展閱讀:模塊化編程及Maven配置最佳實踐之一