SpringBoot中的自定義starter詳解
一、starter簡介
1、SpringBoot starter機(jī)制
SpringBoot中的starter是一種非常重要的機(jī)制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應(yīng)的默認(rèn)配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。SpringBoot會自動通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,并注冊進(jìn)IOC容器。SpringBoot提供了針對日常企業(yè)應(yīng)用研發(fā)各種場景的spring-boot-starter依賴模塊。所有這些依賴模塊都遵循著約定成俗的默認(rèn)配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。
2、為什么要自定義starter
在我們的日常開發(fā)工作中,經(jīng)常會有一些獨立于業(yè)務(wù)之外的配置模塊,我們經(jīng)常將其放到一個特定的包下,然后如果另一個工程需要復(fù)用這塊功能的時候,需要將代碼硬拷貝到另一個工程,重新集成一遍,麻煩至極。如果我們將這些可獨立于業(yè)務(wù)代碼之外的功配置模塊封裝成一個個starter,復(fù)用的時候只需要將其在pom中引用依賴即可。
3、自定義starter命名規(guī)范
官方命名:
- 前綴:spring-boot-starter-xxx
- 比如:spring-boot-starter-web…
自定義命名:
- xxx-spring-boot-starter
- 比如:mybatis-spring-boot-starter
二、starter實現(xiàn)
1、新建工程
這里我命名為shawn-spring-boot-starter
2、添加pom.xml依賴
這里需要注意spring版本,太高可能會導(dǎo)致install失敗
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.shawn</groupId> <artifactId>shawn-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> <name>shawn-spring-boot-starter</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
3、定義一個實體類映射配置信息
@ConfigurationProperties(prefix = "shawn.hello")它可以把相同前綴的配置信息通過配置項名稱映射成實體類,可以直接在yml文件進(jìn)行配置
// 前綴 shawn.hello @ConfigurationProperties(prefix = "shawn.hello") public class ShawnProperties { /** * 前綴 */ private String prefix; /** * 后綴 */ private String suffix; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getSuffix() { return suffix; } public void setSuffix(String suffix) { this.suffix = suffix; } }
4、編寫自己的服務(wù)
public class ShawnService { ShawnProperties ShawnProperties; public ShawnProperties getShawnProperties() { return ShawnProperties; } public void setShawnProperties(ShawnProperties ShawnProperties) { this.ShawnProperties = ShawnProperties; } public String sayHello(String name){ return ShawnProperties.getPrefix() + name + ShawnProperties.getSuffix(); } }
5、定義配置類
這里,我們將ShawnService類定義為一個Bean,交給Ioc容器。 @Configuration 配置注解 @EnableConfigurationProperties。該注解是用來開啟對@ConfigurationProperties 注解配置Bean的支持。當(dāng)然了,也可以在 @ConfigurationProperties 注解的類上添加 @Configuration 或者 @Component注解
@Configuration @ConditionalOnWebApplication //web應(yīng)用生效 @EnableConfigurationProperties(ShawnProperties.class) public class ShawnServiceAutoConfiguration { @Autowired ShawnProperties shawnProperties; @Bean public ShawnService shawnService(){ ShawnService service = new ShawnService(); service.setShawnProperties(shawnProperties); return service; } }
6、在resources編寫一個自己的 META-INF\spring.factories
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.shawn.ShawnServiceAutoConfiguration
7、打包到Maven倉庫
三、測試starter
1、新建項目,引入依賴
<dependency> <groupId>com.shawn</groupId> <artifactId>shawn-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
2、編寫測試類
@RestController public class ShawnCOntroller { @Autowired ShawnService shawnService; @GetMapping("/hello") public String hello(){ return shawnService.sayHello("shawn"); } }
3、配置
在application.yml中進(jìn)行配置
shawn: hello: prefix: prefix suffix: suffix
4、測試
成功打印
到此這篇關(guān)于SpringBoot中的自定義starter詳解的文章就介紹到這了,更多相關(guān)自定義starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常
這篇文章主要介紹了Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常,@ControllerAdvice ,@ControllerAdvice是一個非常有用的注解,顧名思義,這是一個增強(qiáng)的 Controller,一般配合@ExceptionHandler使用來處理全局異常,需要的朋友可以參考下2024-01-01Java基礎(chǔ)知識之StringWriter流的使用
這篇文章主要介紹了Java基礎(chǔ)知識之StringWriter流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12java跳出循環(huán)的三種方式總結(jié)(break語句、continue語句和return語句)
在實際編程中,有時需要在條件語句匹配的時候跳出循環(huán),下面這篇文章主要給大家介紹了關(guān)于java跳出循環(huán)的三種方式,其中包括break語句、continue語句和return語句的相關(guān)資料,需要的朋友可以參考下2023-03-03