App下載

SpringBoot場景啟動(dòng)器Starters是如何自定義的?具體操作展示

猿友 2021-07-29 14:03:06 瀏覽數(shù) (2247)
反饋

本篇文章將和大家分享一下 Spring Boot 框架中的 Starters 場景啟動(dòng)器的內(nèi)容,關(guān)于 Starters 具體是用來做什么的,以及在開發(fā) Spring Boot 項(xiàng)目前,要如何自定義一個(gè) Starters 場景啟動(dòng)器。

一、Starters原理

1.1 Starters場景啟動(dòng)器

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

比如依賴的jar

2、如何編寫自動(dòng)配置?

以WebMvcAutoConfiguration自動(dòng)配置為例:

@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指定這是一個(gè)配置類
@ConditionalOnXXX 在指定條件成立的情況下自動(dòng)配置類生效

自動(dòng)裝配順序
在特定自動(dòng)裝配Class之前 @AutoConfigureBefore
在特定自動(dòng)裝配Class之后@AutoConfigureAfter
指定順序@AutoConfigureOrder

@Bean 給容器中添加組件
@ConfigurationPropertie結(jié)合相關(guān)xxxProperties類來綁定相關(guān)的配置

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

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

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

配置自動(dòng)裝配Bean:
自動(dòng)配置類要能加載
將需要啟動(dòng)就加載的自動(dòng)配置類,將標(biāo)注@Configuration的自動(dòng)配置類配置在META‐INF/spring.factories下,自動(dòng)配置類就會(huì)生效

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

3、模式

啟動(dòng)器(starter)

2021052410143919

啟動(dòng)器只用來做依賴導(dǎo)入
專門寫一個(gè)自動(dòng)配置模塊
啟動(dòng)器依賴自動(dòng)配置,別人只需要引入啟動(dòng)器(starters)

mybatis-spring-boot-starter 自定義啟動(dòng)器名 -spring-boot-starter

二、自定義Starters

構(gòu)建項(xiàng)目:
1.先創(chuàng)建一個(gè)空工程

2021052410143920
2021052410143921

2、創(chuàng)建兩個(gè)模塊分別是啟動(dòng)器starter的maven模塊spring的初始化器創(chuàng)建的自動(dòng)配置模塊

啟動(dòng)器maven模塊

2021052410144022

自定義的starters

2021052410144023

2021052410144024

spring的初始化器創(chuàng)建模塊(創(chuàng)建自動(dòng)配置相關(guān)的模塊)

2021052410144025

三、代碼步驟

在啟動(dòng)器starter的pom文件中引入配置類的坐標(biāo)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>

寫一個(gè)打招呼的功能

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 進(jìn)行屬性綁定的

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

自動(dòng)配置類

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應(yīng)用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {

    @Autowired
    HelloProperties helloProperties;

    @Bean
    public HelloService helloService(){

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

}

然后將這兩個(gè)模塊安裝到maven倉庫中
先安裝配置模塊因?yàn)閟tarter模塊依賴配置模塊,別人調(diào)用我們的starter模塊就行了

2021052410144126

然后將啟動(dòng)器starter也裝到倉庫中,別人就可以用坐標(biāo)引入了

在別的項(xiàng)目中引入自定義的啟動(dòng)器starter

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

配置application.properties

#自定義啟動(dòng)器starter
com.ming.prefix=一起學(xué)習(xí)
com.ming.suffix=你學(xué)費(fèi)了嗎

測試

  @Autowired
    HelloService helloService;

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

本篇關(guān)于 SpringBoot 框架中的場景啟動(dòng)器 Starters 的介紹和自定義方法的內(nèi)容就到此結(jié)束了,想要了解更多相關(guān) Spring Boot 場景啟動(dòng)器 Starters 的其他內(nèi)容請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,也希望大家以后多多支持!


0 人點(diǎn)贊