Spring Boot 自定義starter的示例代碼
SpringBoot 個(gè)人感覺特點(diǎn):
1)眾多庫的集合(各種Starter),方便快速構(gòu)建應(yīng)用系統(tǒng)。
2)自動(dòng)配置spring(通過AutoConfiguration機(jī)制),簡(jiǎn)化配置,也方便擴(kuò)展新的Starter。
3)內(nèi)嵌web容器,無需WAR部署。
創(chuàng)建一個(gè)用maven構(gòu)建的springboot項(xiàng)目

pom文件配置如下:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xjw.springboot</groupId>
<artifactId>hellostarter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello-spring-boot-starter</name>
<description>測(cè)試自定義starter</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
定義一個(gè)pojo用來接收properties中配置的信息
package com.xjw;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperteis {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
@ConfigurationProperties:用來標(biāo)識(shí)這個(gè)pojo是一個(gè)用來接收指定前綴的資源配置值
prefix:表示在配置文件中配置項(xiàng)前綴[/code]
編寫一個(gè)Service用來對(duì)外提供服務(wù)
package com.xjw;
public class HelloService {
private String msg;
public String sayHello() {
return "Hello " + msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
配置一個(gè)pojo用來讀取上面配置的HelloServiceProperteis
package com.xjw;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(value = HelloServiceProperteis.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello", value = "enable", matchIfMissing = true)
public class HelloAutoConfiguration {
@Autowired
private HelloServiceProperteis helloServiceProperteis;
@Bean
@ConditionalOnMissingBean(HelloService.class)
public HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperteis.getMsg());
return helloService;
}
}
@Configuration:標(biāo)識(shí)此類為一個(gè)spring配置類
@EnableConfigurationProperties(value = HelloServiceProperteis.class):啟動(dòng)配置文件,value用來指定我們要啟用的配置類,可以有多個(gè),多個(gè)時(shí)我們可以這么寫value={xxProperties1.class,xxProperteis2.class....}
@ConditionalOnClass(HelloService.class):表示當(dāng)classPath下存在HelloService.class文件時(shí)改配置文件類才有效
@ConditionalOnProperty(prefix = "hello", value = "enable", matchIfMissing = true):表示只有我們的配置文件是否配置了以hello為前綴的資源項(xiàng)值,并且在該資源項(xiàng)值為enable,如果沒有配置我們默認(rèn)設(shè)置為enable[/code]
最后在src/main/resources 文件夾下新建文件夾 META-INF,在新建的META-INF文件夾下新建spring.factories

在新建的spring.factories文件中配置自動(dòng)啟動(dòng)類為我們之前編寫的HelloAutoConfiguration 類
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xjw.HelloAutoConfiguration

然后就可以在其他的spring-boot項(xiàng)目中使用我們剛剛新建的starter了,我們來測(cè)試一下
在新建一個(gè)spring-boot項(xiàng)目,pom.xml配置如下:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xjw.springboot</groupId>
<artifactId>hellostarter.test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello-spring-boot-starter-test</name>
<description>測(cè)試自定義starter</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.xjw.springboot</groupId>
<artifactId>hellostarter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然后我們直接在咋們的啟動(dòng)類中中嘗試使用以下我們上面定義的starter提供的HelloService:
package com.xjw;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class HelloSpringBootStarterTestApplication {
@Autowired
private HelloService helloService;
@RequestMapping("/")
public String index() {
return helloService.sayHello();
}
public static void main(String[] args) {
SpringApplication.run(HelloSpringBootStarterTestApplication.class, args);
}
}
接著我們修改測(cè)試項(xiàng)目中的application.properteis,加入如下配置:
debug=true server.port=8888 #hello=enable hello.msg=測(cè)試starter
最后啟動(dòng)項(xiàng)目,觀察控制臺(tái)輸出的內(nèi)容中依賴的starter,從Positive matches下我們可以看到有這么一句:
HelloAutoConfiguration matched:
- @ConditionalOnClass found required class 'com.xjw.HelloService'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
- @ConditionalOnProperty (hello.enable) matched (OnPropertyCondition)
或者我們打開項(xiàng)目依賴樹也能找到我們的starter ,這說明spring已經(jīng)自動(dòng)的啟動(dòng)了我們的starter了,打開瀏覽器輸入地址:http://localhost:8888/將會(huì)看到如下結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring boot創(chuàng)建自定義starter的完整步驟
- spring boot 自定義starter的實(shí)現(xiàn)教程
- spring boot微服務(wù)自定義starter原理詳解
- springboot自定義Starter的具體流程
- springboot自定義starter實(shí)現(xiàn)過程圖解
- SpringBoot自定義starter實(shí)例代碼
- springboot自定義Starter過程解析
- springboot自定義redis-starter的實(shí)現(xiàn)
- SpringBoot自動(dòng)配置之自定義starter的實(shí)現(xiàn)代碼
- 使用SpringBoot自定義starter的完整步驟
相關(guān)文章
spring-data-jpa使用自定義repository來實(shí)現(xiàn)原生sql
這篇文章主要介紹了在spring-data-jpa中使用自定義repository來實(shí)現(xiàn)原生sql,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
解決異常:Invalid?keystore?format,springboot配置ssl證書格式不合法問題
這篇文章主要介紹了解決異常:Invalid?keystore?format,springboot配置ssl證書格式不合法問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
idea的easyCode的 MybatisPlus模板的配置詳解
這篇文章主要介紹了idea的easyCode的 MybatisPlus模板的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
關(guān)于Java Interface接口的簡(jiǎn)單練習(xí)題
這篇文章主要給大家分享的是關(guān)于Java Interface接口的簡(jiǎn)單練習(xí)題,難度不算大,但是要有一個(gè)清晰的邏輯建立接口和鏈接Java類。下面來看看文章的詳細(xì)介紹吧,需要的朋友可以參考一下2021-11-11
分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證
這篇文章主要為大家介紹分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證的詳解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
JMagick實(shí)現(xiàn)基本圖像處理的類實(shí)例
這篇文章主要介紹了JMagick實(shí)現(xiàn)基本圖像處理的類,實(shí)例分析了java圖像處理的相關(guān)技巧,需要的朋友可以參考下2015-06-06

