SpringBoot自定義Starter的教程指南
什么是SpringBoot Starter
SpringBoot Starter是一個特殊的依賴描述符,它包含了一系列的庫依賴,這些庫依賴定義了某個功能領域(如web應用、數據庫訪問等)所需的所有類庫。SpringBoot通過spring-boot-autoconfigure
模塊提供的自動配置機制來自動配置這些依賴。
Web應用開發(fā)
- spring-boot-starter-web:用于創(chuàng)建Web應用和RESTful服務,包含Tomcat和Spring MVC。
- spring-boot-starter-webflux:用于構建響應式Web應用,基于Reactor和Spring WebFlux。
數據庫訪問
- spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate,用于關系數據庫的操作。
- spring-boot-starter-data-mongodb:用于與MongoDB數據庫的集成。
- spring-boot-starter-data-redis:用于與Redis鍵值存儲的集成。
庫依賴
把具備某些功能的坐標打包到一起,簡化依賴導入。
比如導入了spring-boot-starter-web
這個starter,那么和web相關的jar包都一起自動導入到項目中了。
自動配置
無需手動配置xml,由starter進行自動配置并管理bean,簡化開發(fā)過程。
以mybatis-spring-boot-starter
為例。
1)當引入了mybatis-spring-boot-starter
后,其引入的相關依賴如下:
2)它導入了一個mybatis-spring-boot-autoconfigure
的jar包,其中有一個自動配置類MybatisAutoConfiguration
。
3)打開看看,里面的關鍵代碼
4)其中@Configuration
和@Bean
注解,結合使用替代傳統(tǒng)的xml配置文件,把SqlSessionTemplate
和SqlSessionFactory
注入到Spring容器。
注解@EnableConfigurationProperties
,其作用是讓后面指定的配置屬性MybatisProperties
類生效。
把此類標記為一個配置屬性類,prefix指定了前綴,其屬性就是配置的可選參數。
如配置包的別名:mybatis.type-aliases-package=com.yyh.entity
。
5)那么這個MybatisAutoConfiguration
類是怎么被加載的呢?
在META-INF/spring.factories
文件中,定義了MybatisAutoConfiguration
。
當 SpringBoot 應用程序啟動時,會去加載該 jar 包下的META-INF/spring.factories
文件。
詳情可以參考:SpringBoot自動裝配原理解析
命名規(guī)范
spring-boot-starter-xxx
是SpringBoot官方定義的jar,如 spring-bbot-starter-web。xxx-spring-boot-starter
是非官網定義的,如第三方jar包 mybatis-spring-boot-starter。
自定義 Starter
一般來說,需要我們自定義 starter 的原因如下:
- 封裝功能:封裝一組特定的功能,使其可以輕松地在其他項目中復用。
- 簡化配置:自動配置相關類庫,減少重復的配置工作。
- 模塊化設計:保持應用的模塊化,將特定功能隔離在單獨的模塊中。
比如,我們現(xiàn)在要新建一個 token-redis-spring-boot-starter
。
1)新建項目,配置 pom。
2)在包util下創(chuàng)建類TokenProperties
,此類是一個配置屬性類。
3)在包service下創(chuàng)建類TokenService,作為一個服務。
4)在包config下創(chuàng)建類TokenAutoConfiguration
,實現(xiàn)自動配置,把服務注入到Spring中。
5)創(chuàng)建 spring.factories文件
#后面的路徑是TokenAutoConfiguration所在的路徑 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.demo.config.TokenAutoConfiguration
6)把項目打包發(fā)布到 maven 倉庫。
7)新建一個項目,并引入token-redis-spring-boot-starter
。
8)在配置文件中配置
9)測試運行
輸出:127.0.0.1,0000,8888888
條件注解
在文中出現(xiàn)了好幾個類似于這樣的注解@ConditionalXXX
。
比如:@ConditionalOnProperty
、@ConditionalOnClass
、 @ConditionalOnMissingBean
@Conditional
是在 SpringFramework 4.0 版本正式推出的,它可以讓 Bean的裝載基于一些指定的條件,換句話說,被標注@Conditional
注解的 Bean 要注冊到 IOC 容器時,必須全部滿足@Conditional
上指定的所有條件才可以。
@ConditionalOnProperty
@ConditionalOnProperty
注解用于根據配置文件中的屬性值來決定是否加載某個自動配置類。
- 屬性名稱:可以指定一個或多個屬性名稱,只有當這些屬性被設置時,自動配置類才會被加載。
- 屬性值:可以進一步指定需要匹配的屬性值,只有當屬性的值與指定值相匹配時,自動配置類才會被加載。
@Configuration @EnableConfigurationProperties({TokenProperties.class}) @ConditionalOnProperty( value = {"token.enabled"}, havingValue = "true" ) public class TokenAutoConfiguration { public TokenAutoConfiguration() { } @Bean public TokenService tokenService() { return new TokenService(); } }
在這個例子中,只有當配置文件中存在token.enabled
屬性,TokenAutoConfiguration
類才會被加載。
@ConditionalOnClass
@ConditionalOnClass
注解用于檢查類路徑上是否存在某個類,如果存在,則加載自動配置類。
- classes:指定一個或多個類,如果這些類在類路徑上被找到,自動配置類就會被加載。
@Configuration @ConditionalOnClass(name = {"com.mysql.cj.jdbc.Driver"}) public class MySqlAutoConfiguration { // ... }
在這個例子中,只有當類路徑上存在com.mysql.cj.jdbc.Driver
類時,MySqlAutoConfiguration
類才會被加載,這通常意味著MySQL JDBC驅動已經添加到了項目的依賴中。
@ConditionalOnMissingBean
@ConditionalOnMissingBean
注解用于檢查Spring容器中是否已經存在某個特定的Bean,如果不存在,則創(chuàng)建一個新的Bean。
- value:指定需要檢查的Bean的類型。
- search:指定搜索Bean的范圍,默認為SearchStrategy.ALL,意味著在當前上下文和父上下文中搜索。
@Configuration public class MyServiceAutoConfiguration { @Bean @ConditionalOnMissingBean(MyService.class) public MyService myService() { return new DefaultMyService(); } }
在這個例子中,如果Spring容器中沒有MyService類型的Bean,那么myService方法將被調用以創(chuàng)建一個新的MyService Bean。
組合使用條件注解
這些條件注解可以單獨使用,也可以組合使用,以滿足更復雜的條件判斷需求。
例如,可以同時使用@ConditionalOnProperty
和@ConditionalOnClass
來確保某個自動配置類只在滿足特定屬性值和類路徑上有特定類時才被加載。
@Configuration @ConditionalOnProperty(name = "myapp.enabled") @ConditionalOnClass(name = "com.mysql.cj.jdbc.Driver") public class MySqlAutoConfiguration { // ... }
在這個例子中,MySqlAutoConfiguration
只有在配置文件中設置了myapp.enabled
屬性,并且類路徑上存在com.mysql.cj.jdbc.Driver
類時才會被加載。
以上就是SpringBoot自定義Starter的教程指南的詳細內容,更多關于SpringBoot自定義Starter的資料請關注腳本之家其它相關文章!
相關文章
Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究
這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01SpringBoot 錯誤處理機制與自定義錯誤處理實現(xiàn)詳解
這篇文章主要介紹了SpringBoot 錯誤處理機制與自定義錯誤處理實現(xiàn)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11Jmeter基于JDBC請求實現(xiàn)MySQL數據庫測試
這篇文章主要介紹了Jmeter基于JDBC請求實現(xiàn)MySQL數據庫測試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10Java File類 mkdir 不能創(chuàng)建多層目錄的解決
這篇文章主要介紹了Java File類 mkdir 不能創(chuàng)建多層目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09spring boot實現(xiàn)自動輸出word文檔功能的實例代碼
這篇文章主要介紹了spring boot實現(xiàn)自動輸出word文檔功能的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)
這篇文章主要介紹了Java 添加、刪除、替換、格式化Word中的文本(基于Spire.Cloud.SDK for Java),本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08