年輕人的第一個自定義 Spring Boot Starter!

陸陸續續,零零散散,棧長已經寫了幾十篇 Spring Boot 系列文章了,其中有介紹到 Spring Boot Starters 啓動器,使用的、介紹的都是第三方的 Starters ,那如何開發一個本身的 Spring Boot Starter 呢?java

下面帶你們開發一個年輕人的第一個 Spring Boot Starter!git

不知道 Starters 爲什麼物的請進這個傳送門===>
Spring Boot Starters 啓動器,看完有了學習基礎,咱們再繼續下面的自定義 Starter 實戰!github

1、自定義 Starter 必備組件

一個完整的 Spring Boot Starter 須要包含如下組件:spring

  • 包含自動配置代碼的自動配置模塊;參考:Spring Boot自動配置原理、實戰
  • Starter模塊提供對自動模塊的依賴關係,和相關依賴庫,以及任何須要用到的依賴。簡而言之,就是,添加一個 Starter 就應該提供使用該 Starter 所需的一切;

2、建立一個自定義Starter

怎麼建立 Spring Boot 項目就不說了,以前也分享過,參考:年輕人的第一個 Spring Boot 應用!springboot

這個自定義 Starter 就實現一個根據屬性的值是否配置Bean。微信

一、建立自動配置類

package cn.javastack.springboot.starter.config;

import cn.javastack.springboot.starter.service.TestService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnProperty(prefix = "javastack.starter", name = "enabled", havingValue = "true")
public class TestServiceAutoConfiguration {

    @Bean
    public TestService testService() {
        return new TestService();
    }

}

這個自動配置類很簡單,就是根據是否有 javastack.starter.enabled=true 這個參數的值再配置一個Bean。 app

TestService示例以下:spring-boot

package cn.javastack.springboot.starter.service;

public class TestService {

    public String getServiceName() {
        return "Java技術棧";
    }

}

這個類就有一個方法 getServiceName,它就返回一個字符串:Java技術棧學習

二、容許自動配置

建立 META-INF/spring.factories 文件,添加這個容許自動配置的類。測試

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.javastack.springboot.starter.config.TestServiceAutoConfiguration

3、測試這個自定義Starter

上面的自定義 Starter 項目建好後,能夠來測試一下它是否生效了。

通常是把它打成 jar 包上傳到 Maven 倉庫,供其餘同事調用,這裏咱們本報打完包以後再引用它。

一、添加依賴

新建一個 Spring Boot 測試項目,添加這個自定義 Starter 依賴,Maven 依賴以下:

<dependencies>
    <dependency>
        <groupId>cn.javastack</groupId>
        <artifactId>javastack-spring-boot-starter</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

二、添加測試方法

package cn.javastack.springboot.starter.sample;

import cn.javastack.springboot.starter.service.TestService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 * 微信公衆號:Java技術棧
 */
@SpringBootApplication
public class Application {

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

    @Bean
    public CommandLineRunner commandLineRunner(TestService testService) {
        return (args) -> {
            System.out.println(testService.getServiceName());
        };
    }

}

這個方法的做用是,項目啓動後,調用 TestService 的實例方法,輸出方法的值。

關於 CommandLineRunner 有不懂的能夠看這篇文章:Spring Boot Runner 啓動器

三、開啓配置

咱們知道這個自定義 Starter 中須要有 javastack.starter.enabled=true 這個參數的值的,因此咱們在 application.yml 配置文件中添加這個配置:

javastack:
  starter:
    enabled: true

四、運行測試

運行 Application 類的 main 方法,最後會輸出結果:Java技術棧。

當咱們把配置改成:

javastack:
  starter:
    enabled: false

此時,運行報錯,由於沒有這個實例啊,自動配置類只有爲 true 時纔會配置。

4、總結

本章棧長簡單演示瞭如何自定義一個 Spring Boot Starter,根據某個參數的值來決定是否自動配置,其實還能夠根據是否有某個類、某個Bean……等,能夠看下《Spring Boot 最核心的 25 個註解》這篇文章對應的 ConditionOnXXX 系列註解。

其實瞭解了 Spring Boot 自動配置的原理,自定義一個 Starter 並不難,你能夠在這個實例基礎上靈活擴展。

本文完整的代碼實例 Github 地址:

https://github.com/javastacks...

趕忙關注加星吧,已經更新一大堆教程了,後續這個教程會持續更新……

本文原創首發於微信公衆號:Java技術棧(id:javastack),關注公衆號在後臺回覆 "boot" 可獲取更多 Spring Boot 教程,轉載請原樣保留本信息。

相關文章
相關標籤/搜索