1. 程式人生 > >實戰|如何自定義SpringBoot Starter?

實戰|如何自定義SpringBoot Starter?

SpringBoot自動化配置原始碼分析從原始碼的角度講解了 SpringBoot 自動化配置的原理,知道了它最終要乾的事情不過是讀取 META-INF/spring.factories 中的自動化配置類而已。

SpringBoot 專案就是由一個一個 Starter 組成的,一個 Starter 代表該專案的 SpringBoot 起步依賴,除了官方已有的 Starter,如果你需要將自己的專案支援 SpringBoot,那麼就需要把它製作成一個 Starter。這篇部落格依據 SpringBoot 的自動化配置原理,開發一個屬於自己的 Starter。

自定義 Starter

自動化配置需滿足兩個條件:

  1. 能夠生成 Bean,並註冊到 Bean 容器中;
  2. 能夠自動配置專案所需要的配置。

在這裡建立一個 spring-boot-starter-helloworld 專案作為例子,實現以上兩點。

引入 SpringBoot 自動化配置依賴:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>1.5.9.RELEASE</version>
  </dependency>
</dependencies>

spring-boot-starter-helloworld 只是作為例子演示自定義 starter 的過程,實現的功能很簡單就是建立一個 HelloworldService 的,並配置 sayHello() 方法列印的語句。

public class HelloworldService {

  private String words;

  private String getWords() {
    return words;
  }

  public void setWords(String words) {
    this.words = words;
  }

  public String sayHello() {
     return "hello, " + words;
  }
}

建立屬性類,prefix = "helloworld"代表該專案在屬性檔案中配置的字首,即可以在屬性檔案中通過 helloworld.words=springboot,就可以改變屬性類欄位 words 的值了。

@ConfigurationProperties(prefix = "helloworld")
public class HelloworldProperties {
  public static final String DEFAULT_WORDS = "world";

  private String words = DEFAULT_WORDS;

  public String getWords() {
    return words;
  }

  public void setWords(String words) {
    this.words = words;
  }
}

建立自動化配置類,這個相當於就是一個普通的 Java 配置類,可以在這裡建立 Bean,並可獲得與 application.properties 屬性檔案相對應的屬性類的 Bean。

// 相當於一個普通的 java 配置類
@Configuration
// 當 HelloworldService 在類路徑的條件下
@ConditionalOnClass({HelloworldService.class})
// 將 application.properties 的相關的屬性欄位與該類一一對應,並生成 Bean
@EnableConfigurationProperties(HelloworldProperties.class)
public class HelloworldAutoConfiguration {

  // 注入屬性類
  @Autowired
  private HelloworldProperties hellowordProperties;

  @Bean
  // 當容器沒有這個 Bean 的時候才建立這個 Bean
  @ConditionalOnMissingBean(HelloworldService.class)
  public HelloworldService helloworldService() {
    HelloworldService helloworldService = new HelloworldService();
    helloworldService.setWords(hellowordProperties.getWords());
    return helloworldService;
  }
}

在 META-INF 目錄下建立 spring.factories,這個屬性檔案可重要啦,因為 SpringBoot 自動化配置最終就是要掃描 META-INF/spring.factories 來載入專案的自動化配置類。

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.objcoding.starters.helloworld.HelloworldAutoConfiguration

引用 Starter

為了引入 starter,我在這裡再建立一個 spring-boot-starter-helloworld-sample 專案。

新增 spring-boot-starter-helloworld 起步依賴:

<dependency>
  <groupId>com.objcoding</groupId>
  <artifactId>spring-boot-starter-helloworld</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

在 application.properties 中新增屬性:

helloworld.words=springboot

在 SpringBoot 主程式中 注入 helloworldService

@RestController
@SpringBootApplication
public class HelloworldApplication {

  @Autowired
  private HelloworldService helloworldService;

  @RequestMapping("/")
  public String sayHello() {
    return helloworldService.sayHello();
  }

  public static void main(String[] args) {
    SpringApplication.run(HelloworldApplication.class, args);
  }
}

訪問 http://localhost:8080/,列印以下結果:

hello, springboot

要原始碼的同學點選這裡獲取: https://github.com/objcoding/spring-boot-starter-tutorial

公眾號「後端進階」,專注後   
 
 </div> 
 <div class=

相關推薦

實戰|如何定義SpringBoot Starter

SpringBoot自動化配置原始碼分析從原始碼的角度講解了 SpringBoot 自動化配置的原理,知道了它最終要乾的事情不過是

springboot系列十四、定義實現starter

一、starter的作用   當我們實現了一個組建,希望儘可能降低它的介入成本,一般的組建寫好了,只要新增spring掃描路徑載入spring就能發揮作用。有個更簡單的方式掃描路徑都不用加,直接引入jar就能使用。   原理時因為springboot提供一個配置檔案 spring.factori

定義SpringBoot啟動banner

文件夾 main方法 %20 找到 分享圖片 war 參數 app www. 序: springboot啟動的時候會有一個啟動logo似的東西,如圖,這個logo似的東西叫做banner,本文小計修改此banner顯示與關閉banner。沒什麽用,有興趣可以玩玩…… 正文

定義springboot專案的banner

注意:本文僅供娛樂 預設情況下,spring boot專案啟動的時候會打印出這樣一個效果: 實際上,這個效果是可以自定義的,具體怎麼做,其實很簡單,我們可以在classpath下面放上一個名為banner.txt的檔案,裡邊放入想要打印出來的內容,例如: 啟動專案,檢視列印效果:

[Unity實戰]定義mesh

參考連結:http://blog.csdn.net/zuoyamin/article/details/9287507 對於自定義mesh,有三點很重要: 1.頂點個數=三角形數+2;三角形頂點數=3*三角形數 2.頂點建立的順序最好是順時針或者逆時針建立的,這樣可以大大地

Ionic 3 專案實戰------定義外掛

一個外掛應該至少包含以下file: plugin-name -----------------src                                 //外掛支援平臺 ------android.java      //添加了支援Android平臺 ---

android retrofit 實戰定義converter,解決相同介面返回不同資料的問題

square的retrofit是目前比較火的網路框架,我目前也在用 今天專案上遇到一個問題,就是請求同一個介面,可能返回不同的json格式 例如,訪問一個登入介面,成功的時候,返回的是 {     "code": 0,     "message": "登入成功",    

stream外掛跨域大檔案斷點續傳實戰+定義限速

JAVA跨域大檔案斷點續傳+自定義限速 前言:本文所講到的內容完全獨創,遇坑很多,但是本著資源共享的原則,將兩個星期的成果分享給大家,請尊重別人的勞動成果,轉載請註明出處:http://blog.c

定義SpringBoot程式啟動圖示

在SpringBoot程式啟動時,控制檯經常看到以下啟動圖示。 修改圖示步驟 在src/main/resources目錄下建立一個banner.txt檔案; 將圖示新增到banner.txt檔案儲存,啟動SpringBoot程式。 圖示可以自己製作,也可以用下面網

SpringBoot實戰筆記:15_SpringBoot 定義starter pom

15_SpringBoot 自定義starter pom 我們在 pom.xml 中的那些springboot依賴,就是starter 目的:當某個類存在的時候,自動配置這個類的Bean,並可將Bean的書寫在 application.properties

springboot 定義一個簡單的 starter

1.新建專案 。 啟動器只用來做依賴匯入; 專門來寫一個自動配置模組; idea 下建立空專案 hello-spring-boot-starter 新增兩個子模組 spring-boot-starter-autoconfigurer, spring-boot-starter-hell

定義spring boot starter三部曲之二:實戰開發

本文是《自定義spring boot starter三部曲》的第二篇,上一篇中我們通過學習spring cloud的starter,對spring boot的starter有了初步瞭解,也設計好了實戰內容,今天就來一起實現; 三部曲文章連結 《自定義spring boot

springboot定義starter(protobuf-spring-boot-starter

0.簡介(因為沒有想到合適的事例 所以就封一層protobuf) 官方命名:spring-boot-starter-{name} 比如spring-boot-starter-web 非官方命名:{name}-spring-boot-starter 比如mybatis-spring-b

springboot學習(六): 建立定義springboot starter

說明 在學習中,希望能建立自己的依賴,讓springboot通過<dependency>引用。springboot提供了starter來引用,所以通過建立自定義的starter來實現。有關springboot starter的知識詳見Spring B

SpringBoot入門(19)- 定義starter

1、具體用的類如下 RedisProperties.java import org.springframework.boot.context.properties.ConfigurationPr

使用springboot定義starter

建立一個maven專案,在pom檔案中新增如下依賴: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

springboot--定義starter

轉載:https://www.jianshu.com/p/45538b44e04e 眾所周知(不知道?點此),Spring Boot由眾多Starter組成,隨著版本的推移Starter家族成員也與日俱增。在傳統Maven專案中通常將一些層、元件拆分為模組來管理,以便相互依賴複用,在Sp

springboot實戰第四章-定義HttpMessageConverter

自定義HttpMessageConverter  HttpMessageConverter是用來處理request和response裡的資料的。Spring內建了很多HttpMessageConverter,比如MappingJackson2HttpMessageConver

SpringBoot定義Starter及AutoConfiguration

現在微服務化是大趨勢,因為現在伴隨著移動網際網路的快速發展,快速上線,快速更新等需求越來越多,所以雲平臺營運而來,從Docker在到Kubernate,微服務逐漸成為了現代軟體開發的新寵。說道微服務,我們就要說一下,微服務需要哪些服務來支撐,為什麼選擇SpringBoot,微

SpringBoot編寫定義Starter

this star pom.xml ring work image pty web ble 根據SpringBoot的Starter編寫規則,需要編寫xxxStarter依賴xxxAutoConfigurer,xxxStarter是一個空的jar,僅提供輔助性的依賴管理,引