淺談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)
啟動器隻用來做依賴導入
專門寫一個自動配置模塊
啟動器依賴自動配置,別人隻需要引入啟動器(starters)
mybatis-spring-boot-starter 自定義啟動器名 -spring-boot-starter
二、自定義Starters
構建項目:
1.先創建一個空工程
2、創建兩個模塊分別是啟動器starter的maven模塊和spring的初始化器創建的自動配置模塊
啟動器maven模塊
自定義的starters
spring的初始化器創建模塊(創建自動配置相關的模塊)
三、代碼步驟
在啟動器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模塊就行瞭
然後將啟動器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!
推薦閱讀:
- springboot自定義starter啟動器的具體使用實踐
- SpringBoot如何自定義starter啟動器的實現思路
- 手擼一個 spring-boot-starter的全過程
- 使用SpringBoot自定義starter詳解
- springboot自定義starter方法及註解實例