淺談SpringBoot如何自定義Starters
一、Starters原理
1.1 Starters場(chǎng)景啟動(dòng)器
1、場(chǎng)景需要用到的依賴(lài)是什么?
比如依賴(lài)的jar
2、如何編寫(xiě)自動(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è)配置類(lèi)
@ConditionalOnXXX 在指定條件成立的情況下自動(dòng)配置類(lèi)生效
自動(dòng)裝配順序
在特定自動(dòng)裝配Class之前 @AutoConfigureBefore
在特定自動(dòng)裝配Class之后@AutoConfigureAfter
指定順序@AutoConfigureOrder
@Bean 給容器中添加組件
@ConfigurationPropertie結(jié)合相關(guān)xxxProperties類(lèi)來(lái)綁定相關(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)配置類(lèi)要能加載
將需要啟動(dòng)就加載的自動(dòng)配置類(lèi),將標(biāo)注@Configuration的自動(dòng)配置類(lèi)配置在META‐INF/spring.factories下,自動(dòng)配置類(lèi)就會(huì)生效
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
3、模式
啟動(dòng)器(starter)
啟動(dòng)器只用來(lái)做依賴(lài)導(dǎo)入
專(zhuān)門(mén)寫(xiě)一個(gè)自動(dòng)配置模塊
啟動(dòng)器依賴(lài)自動(dòng)配置,別人只需要引入啟動(dòng)器(starters)
mybatis-spring-boot-starter 自定義啟動(dòng)器名 -spring-boot-starter
二、自定義Starters
構(gòu)建項(xiàng)目:
1.先創(chuàng)建一個(gè)空工程
2、創(chuàng)建兩個(gè)模塊分別是啟動(dòng)器starter的maven模塊和spring的初始化器創(chuàng)建的自動(dòng)配置模塊
啟動(dòng)器maven模塊
自定義的starters
spring的初始化器創(chuàng)建模塊(創(chuàng)建自動(dòng)配置相關(guān)的模塊)
三、代碼步驟
在啟動(dòng)器starter的pom文件中引入配置類(lèi)的坐標(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>
寫(xiě)一個(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)配置類(lèi)
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倉(cāng)庫(kù)中
先安裝配置模塊因?yàn)閟tarter模塊依賴(lài)配置模塊,別人調(diào)用我們的starter模塊就行了
然后將啟動(dòng)器starter也裝到倉(cāng)庫(kù)中,別人就可以用坐標(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)了嗎
測(cè)試
@Autowired HelloService helloService; @Test public void starterTest(){ String sayHello = helloService.sayHello("自定義starter"); System.out.println(sayHello); }
到此這篇關(guān)于淺談SpringBoot如何自定義Starters的文章就介紹到這了,更多相關(guān)Spring Boot自定義Starters內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決springboot沒(méi)有啟動(dòng)標(biāo)識(shí),啟動(dòng)類(lèi)也沒(méi)有啟動(dòng)標(biāo)識(shí)的問(wèn)題
這篇文章主要介紹了解決springboot沒(méi)有啟動(dòng)標(biāo)識(shí),啟動(dòng)類(lèi)也沒(méi)有啟動(dòng)標(biāo)識(shí)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01springboot后端接收前端傳數(shù)組參數(shù)三種方法
這篇文章主要給大家介紹了關(guān)于springboot后端接收前端傳數(shù)組參數(shù)三種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-07-07使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法
本篇文章主要介紹了使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07SpringBoot3.2.2整合MyBatis-Plus3.5.5依賴(lài)不兼容的問(wèn)題解決
這篇文章給大家介紹了Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依賴(lài)不兼容問(wèn)題,文中通過(guò)代碼示例和圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01Java實(shí)現(xiàn)的不同圖片居中剪裁生成同一尺寸縮略圖功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的不同圖片居中剪裁生成同一尺寸縮略圖功能,涉及java針對(duì)圖片的讀取、屬性修改等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09java Spring Boot 配置redis pom文件操作
這篇文章主要介紹了java Spring Boot 配置redis pom文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Java concurrency集合之ConcurrentSkipListSet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency集合之ConcurrentSkipListSet的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06