淺談SpringBoot如何自定義Starters

一、Starters原理

1.1 Starters場景啟動器

1、場景需要用到的依賴是什麼?

比如依賴的jar

2、如何編寫自動配置?

以WebMvcAutoConfiguration自動配置為例:

@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,
		WebMvcConfigurerAdapter.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
		ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {

	public static final String DEFAULT_PREFIX = "";

	public static final String DEFAULT_SUFFIX = "";

@Configuration指定這是一個配置類
@ConditionalOnXXX 在指定條件成立的情況下自動配置類生效

自動裝配順序
在特定自動裝配Class之前 @AutoConfigureBefore
在特定自動裝配Class之後@AutoConfigureAfter
指定順序@AutoConfigureOrder

@Bean 給容器中添加組件
@ConfigurationPropertie結合相關xxxProperties類來綁定相關的配置

@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
}

@EnableConfigurationProperties 讓xxxProperties生效加入到容器中

@Configuration
@Import(EnableWebMvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {
}

配置自動裝配Bean:
自動配置類要能加載
將需要啟動就加載的自動配置類,將標註@Configuration的自動配置類配置在META‐INF/spring.factories下,自動配置類就會生效

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\

3、模式

啟動器(starter)

qid

啟動器隻用來做依賴導入
專門寫一個自動配置模塊
啟動器依賴自動配置,別人隻需要引入啟動器(starters)

mybatis-spring-boot-starter 自定義啟動器名 -spring-boot-starter

二、自定義Starters

構建項目:
1.先創建一個空工程

112
s

2、創建兩個模塊分別是啟動器starter的maven模塊spring的初始化器創建的自動配置模塊

啟動器maven模塊

1

自定義的starters

在這裡插入圖片描述

在這裡插入圖片描述

spring的初始化器創建模塊(創建自動配置相關的模塊)

23

三、代碼步驟

在啟動器starter的pom文件中引入配置類的坐標ming-spring-boot-starter-autoconfigurer

<?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.ming.springboot</groupId>
    <artifactId>ming-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.ming.springboot</groupId>
            <artifactId>ming-spring-boot-starter-autoconfigurer</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

寫一個打招呼的功能

package com.ming.springboot;

/**
 * 打招呼的
 *
 */
public class HelloService {

    HelloProperties helloProperties;

    public HelloProperties getHelloProperties() {
        return helloProperties;
    }

    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }

    public String sayHello(String name){

        return helloProperties.getPrefix()+"-"+name+helloProperties.getSuffix();
    }
}

HelloProperties 和Helloservice 進行屬性綁定的

package com.ming.springboot;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "com.ming")
public class HelloProperties {

    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;
    }
}

自動配置類

package com.ming.springboot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnWebApplication //web應用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {

    @Autowired
    HelloProperties helloProperties;

    @Bean
    public HelloService helloService(){

        HelloService  helloService = new HelloService();
        helloService.setHelloProperties(helloProperties);
        return  helloService;
    }

}

然後將這兩個模塊安裝到maven倉庫中
先安裝配置模塊因為starter模塊依賴配置模塊,別人調用我們的starter模塊就行瞭

2

然後將啟動器starter也裝到倉庫中,別人就可以用坐標引入瞭

在別的項目中引入自定義的啟動器starter

   <!--引入自定義的starter-->
        <dependency>
            <groupId>com.ming.springboot</groupId>
            <artifactId>ming-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

配置application.properties

#自定義啟動器starter
com.ming.prefix=一起學習
com.ming.suffix=你學費瞭嗎

測試

  @Autowired
    HelloService helloService;

    @Test
    public void starterTest(){
        String sayHello = helloService.sayHello("自定義starter");
        System.out.println(sayHello);
    }

到此這篇關於淺談SpringBoot如何自定義Starters的文章就介紹到這瞭,更多相關Spring Boot自定義Starters內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: