您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Spring-boot原理及spring-boot-starter的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Spring-boot原理及spring-boot-starter的示例分析”這篇文章吧。
Spring-boot自出現后,到現在火的很,大家貌似都在用,連招聘里面也要求會這個。但是說實話,spring-boot無外乎想實現一種可插拔的編程方式,說是簡化配置,其實并沒有減少多少,只不過把配置落到代碼里面,通過各種annotation來標示了。
作為個人其實不太愿意團隊用spring-boot這種層層封裝的方式,各種jar鋪天蓋地,最終大家都被綁架了,自己底層的能力不一定有什么提高。
spring-boot的starter又是個什么鬼?
一句話,spring-boot的starter是一個通過maven完成自包含并通過annotation配置使得可被spring上下文發現并實例化的一個可插拔的組件或服務。
spring-boot有兩種starter
一種是內部已經支持的,一種是第三方的。
內部支持starter:
其通過@ConditionalOnClass來實決定是否例化(ConditionalOnClass是指當在classpath發現需要的依賴的類時實例化),想要啟動這個服務,只要要配置上對應的starter,這個starter就能把所需要的jar給關聯上。
類似于我們對log的使用,默認使用slf4j這個api接口,提供一個鉤子,classpath里面誰實現了這個機構,誰就掛到這個鉤子上成為log具體實現,其中log4j就是一個實現。
通過spring的如下maven配置即可看見里面已經通過dependencyManagement(這個時maven的依賴管理,不用的時候不會加載)給你配置好了所有內置starter。只需要用的時候把對應的starter依賴配置上就行了。
<dependency> jpg <groupId>org.springframework.boot</groupId> jpg <artifactId>spring-boot-starter</artifactId> < jpg/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> jpg<groupId>org.mybatis.spring.boot</groupId> jpg<artifactId>mybatis-spring-boot-starter</artifactId> jpg<version>1.3.0</version> jpg</dependency>
這個依賴是一個pom,點進去可以看見自包含的依賴關系,其中一個就是mybatis的autoConfigure,通過@bean等annotation完成對mybatis的實例化配置,如下:
具體代碼:
基于這個機制,我們自己也可以實現一個
本次實現一個簡單的數據庫操作組件,類似于mybatis,只不過只實現了簡單的查詢服務。
整個示例有兩個工程:
一個實現我們自己的starter(取名叫spring-boot-mydao-starter),最后會打成ar包,并install到本地maven本地廠庫里。
另外一個工程用于測試,最終會依賴spring-boot-mydao-starter整個組件,并調用里面的查詢服務去測試。
工程
具體類如下:
1、創建spring-boot-mydao-starter工程,添加相關依賴配置
我們實現的這個組件僅僅依賴于mysql的驅動以及spring-boot的上下文環境。其中mysql驅動用的spring-boot-starter-parent里面配置好的,這里直接用即可,maven配置如下:
2、實現以下幾個類:
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來測試。
以上是“Spring-boot原理及spring-boot-starter的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。