亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開(kāi)發(fā) > Java > 正文

SpringBoot自定義starter實(shí)例代碼

2024-07-14 08:43:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、簡(jiǎn)介

SpringBoot 最強(qiáng)大的功能就是把我們常用的場(chǎng)景抽取成了一個(gè)個(gè)starter(場(chǎng)景啟動(dòng)器),我們通過(guò)引入SpringBoot 為我提供的這些場(chǎng)景啟動(dòng)器,我們?cè)龠M(jìn)行少量的配置就能使用相應(yīng)的功能。即使是這樣,SpringBoot也不能囊括我們所有的使用場(chǎng)景,往往我們需要自定義starter,來(lái)簡(jiǎn)化我們對(duì)SpringBoot的使用。

下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

二、如何自定義starter

1.實(shí)例

如何編寫(xiě)自動(dòng)配置 ?

我們參照@WebMvcAutoConfiguration為例,我們看看需要準(zhǔn)備哪些東西,下面是WebMvcAutoConfiguration的部分代碼:

@Configuration@ConditionalOnWebApplication@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class})@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})@AutoConfigureOrder(-2147483638)@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class})public class WebMvcAutoConfiguration {	@Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class}) @EnableConfigurationProperties({WebMvcProperties.class, ResourceProperties.class}) public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter { @Bean @ConditionalOnBean({View.class}) @ConditionalOnMissingBean public BeanNameViewResolver beanNameViewResolver() {  BeanNameViewResolver resolver = new BeanNameViewResolver();  resolver.setOrder(2147483637);  return resolver; } }}

我們可以抽取到我們自定義starter時(shí),同樣需要的一些配置。

@Configuration //指定這個(gè)類是一個(gè)配置類@ConditionalOnXXX //指定條件成立的情況下自動(dòng)配置類生效@AutoConfigureOrder //指定自動(dòng)配置類的順序@Bean //向容器中添加組件@ConfigurationProperties //結(jié)合相關(guān)xxxProperties來(lái)綁定相關(guān)的配置@EnableConfigurationProperties //讓xxxProperties生效加入到容器中自動(dòng)配置類要能加載需要將自動(dòng)配置類,配置在META-INF/spring.factories中org.springframework.boot.autoconfigure.EnableAutoConfiguration=/org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,/org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,/

模式

我們參照 spring-boot-starter 我們發(fā)現(xiàn)其中沒(méi)有代碼:

SpringBoot,starter,代碼

我們?cè)诳此膒om中的依賴中有個(gè) springboot-starter

<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-starter</artifactId></dependency>

我們?cè)倏纯?spring-boot-starter 有個(gè) spring-boot-autoconfigure

<dependency>	<groupId>org.springframework.boot</groupId>	<artifactId>spring-boot-autoconfigure</artifactId></dependency>

關(guān)于web的一些自動(dòng)配置都寫(xiě)在了這里 ,所以我們有以下總結(jié):

啟動(dòng)器starter只是用來(lái)做依賴管理
需要專門寫(xiě)一個(gè)類似spring-boot-autoconfigure的配置模塊
用的時(shí)候只需要引入啟動(dòng)器starter,就可以使用自動(dòng)配置了

命名規(guī)范

官方命名空間

  • 前綴:spring-boot-starter-
  • 模式:spring-boot-starter-模塊名
  • 舉例:spring-boot-starter-web、spring-boot-starter-jdbc

自定義命名空間

  • 后綴:-spring-boot-starter
  • 模式:模塊-spring-boot-starter
  • 舉例:mybatis-spring-boot-starter

三、自定義starter實(shí)例

我們需要先創(chuàng)建兩個(gè)工程 hello-spring-boot-starter 和 hello-spring-boot-starter-autoconfigurer

1. hello-spring-boot-starter

1.pom.xml

<?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.gf</groupId>	<artifactId>hello-spring-boot-starter</artifactId>	<version>0.0.1-SNAPSHOT</version>	<packaging>jar</packaging>	<name>hello-spring-boot-starter</name>	<!-- 啟動(dòng)器 -->	<dependencies>		<!-- 引入自動(dòng)配置模塊 -->		<dependency>			<groupId>com.gf</groupId>			<artifactId>hello-spring-boot-starter-autoconfigurer</artifactId>			<version>0.0.1-SNAPSHOT</version>		</dependency>	</dependencies></project>

同時(shí)刪除 啟動(dòng)類、resources下的文件,test文件。

2. hello-spring-boot-starter-autoconfigurer

1. pom.xml

<?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.gf</groupId>	<artifactId>hello-spring-boot-starter-autoconfigurer</artifactId>	<version>0.0.1-SNAPSHOT</version>	<packaging>jar</packaging>	<name>hello-spring-boot-starter-autoconfigurer</name>	<description>Demo project for Spring Boot</description>	<parent>		<groupId>org.springframework.boot</groupId>		<artifactId>spring-boot-starter-parent</artifactId>		<version>1.5.9.RELEASE</version>		<relativePath/> <!-- lookup parent from repository -->	</parent>	<properties>		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>		<java.version>1.8</java.version>	</properties>	<dependencies>		<!-- 引入spring-boot-starter,所有starter的基本配合 -->		<dependency>			<groupId>org.springframework.boot</groupId>			<artifactId>spring-boot-starter</artifactId>		</dependency>	</dependencies></project>

2. HelloProperties

package com.gf.service;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "gf.hello")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; }}

3. HelloService

package com.gf.service;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(); }}

4. HelloServiceAutoConfiguration

package com.gf.service;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 service = new HelloService();  service.setHelloProperties( helloProperties );  return service; }}

5. spring.factories

在 resources 下創(chuàng)建文件夾 META-INF 并在 META-INF 下創(chuàng)建文件 spring.factories ,內(nèi)容如下:

# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=/com.gf.service.HelloServiceAutoConfiguration

到這兒,我們的配置自定義的starter就寫(xiě)完了 ,我們把 hello-spring-boot-starter-autoconfigurer、hello-spring-boot-starter 安裝成本地jar包。

三、測(cè)試自定義starter

我們創(chuàng)建個(gè)項(xiàng)目 hello-spring-boot-starter-test,來(lái)測(cè)試系我們寫(xiě)的stater。

1. pom.xml

<?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.gf</groupId>	<artifactId>hello-spring-boot-starter-test</artifactId>	<version>0.0.1-SNAPSHOT</version>	<packaging>jar</packaging>	<name>hello-spring-boot-starter-test</name>	<description>Demo project for Spring Boot</description>	<parent>		<groupId>org.springframework.boot</groupId>		<artifactId>spring-boot-starter-parent</artifactId>		<version>1.5.9.RELEASE</version>		<relativePath/> <!-- lookup parent from repository -->	</parent>	<properties>		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>		<java.version>1.8</java.version>	</properties>	<dependencies>		<dependency>			<groupId>org.springframework.boot</groupId>			<artifactId>spring-boot-starter-web</artifactId>		</dependency>		<!-- 引入自定義starter -->		<dependency>			<groupId>com.gf</groupId>			<artifactId>hello-spring-boot-starter</artifactId>			<version>0.0.1-SNAPSHOT</version>		</dependency>		<dependency>			<groupId>org.springframework.boot</groupId>			<artifactId>spring-boot-starter-test</artifactId>			<scope>test</scope>		</dependency>	</dependencies>	<build>		<plugins>			<plugin>				<groupId>org.springframework.boot</groupId>				<artifactId>spring-boot-maven-plugin</artifactId>			</plugin>		</plugins>	</build></project>

2. HelloController

package com.gf.controller;import com.gf.service.HelloService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @Autowired HelloService helloService; @GetMapping("/hello/{name}") public String hello(@PathVariable(value = "name") String name) {  return helloService.sayHello( name + " , " ); }}

3. application.properties

gf.hello.prefix = higf.hello.suffix = what's up man ?

我運(yùn)行項(xiàng)目訪問(wèn) http://127.0.0.1:8080/hello/zhangsan,結(jié)果如下:

hi-zhangsan , what's up man ? 

源碼下載: https://github.com/gf-huanchupk/SpringBootLearning

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美天天综合| 欧美电影院免费观看| 天天干天天操天天做| 99视频精品免费| 欧美激情在线一区二区| 手机在线免费看av| 在线观看免费黄网站| 亚州av综合色区无码一区| 97久久超碰| 亚洲国产视频二区| 99re在线视频播放| 成人中文字幕视频| 亚洲一区站长工具| 国产日韩欧美高清免费| 精品久久久久久一区二区里番| 久久久久无码精品| 日韩精品高清在线| 伊人网av在线| 欧美日韩国产综合新一区| 日韩女优在线视频| 免费看的av网站| eeuss影院www在线| 成人黄色电影在线| 写真片福利在线播放| 黄页网站免费观看| 巨骚激情综合| 明星乱亚洲合成图.com| 国产aⅴ综合色| 操操操干干干| 香港成人在线视频| 99综合电影在线视频| 91香蕉国产视频| 欧美男男同志| 精品国产一区二区三区噜噜噜| 天堂av在线8| 99久久精品国产亚洲| 欧美久久久久免费| 国产自产女人91一区在线观看| 久久久久99精品成人| 亚洲av无码久久精品色欲| 最新中文在线视频| 美女把尿口扒开给男人桶视频| 糖心vlog免费在线观看| 色综合影院在线| 久久婷婷蜜乳一本欲蜜臀| 欧美日韩一区二区三区四区不卡| 川上优av一区二区线观看| 欧美白嫩的18sex少妇| 国产精品私房写真福利视频| 免费影院在线观看一区| 色www永久免费视频首页在线| www.一区二区| 日本不卡高字幕在线2019| 亚洲国产中文字幕在线| 日韩欧美在线观看强乱免费| 911亚洲精选| 国产欧美视频在线| 亚洲av成人片无码| 暖暖影院日本高清...免费| 日韩电影视频免费| 久久精品国产一区二区三区免费看| 岛国精品资源网站| 欧美色图17p| 884aa四虎影成人精品一区| 伊人久久大香伊蕉在人线观看热v| 伊人一区二区三区久久精品| 色视频在线观看福利| a资源在线观看| 91麻豆免费视频| 97中文字幕在线观看| 色偷偷av一区二区三区乱| 一区二区三区视频在线观看免费| 天天爱天天操天天干| 亚洲欧洲中文天堂| 欧美激情国产高清| 六月婷婷色综合| 在线观看你懂的视频| 中文字字幕一区二区三区四区五区| 欧美日韩日日骚| 老司机在线精品视频| 少妇高潮一69aⅹ| 亚洲成人av资源网| 成人动漫视频在线| 欧美在线一区二区三区四| 在线观看91av| 337p日本欧洲亚洲大胆色噜噜| 乱码一区二区三区| 成人影院在线| 欧美电影一区二区三区| 久久久免费看| 视频精品一区二区| 欧美高清自拍一区| julia中文字幕久久亚洲蜜臀| eeuss影院在线观看| 色一色在线观看视频网站| 欧美一区观看| 日韩一区二区三区精品视频| 国产一区亚洲二区三区| 久久嫩草精品久久久精品| 熟女丰满老熟女熟妇| 日韩欧美一区在线观看| a视频免费看| 丰满少妇又爽又紧又丰满69| 久久免费视频6| 中文字幕人成人乱码亚洲电影| 日产精品高清视频免费| 好色视频app| 国产黄色三级网站| 高清国产免费| 夜夜春成人影院| 黄色激情小视频| 中文亚洲免费| 日本高清一二三区| 久久久久亚洲av无码专区喷水| 久久久久久无码精品大片| 日本a级不卡| 久久久无码一区二区三区| 国产午夜福利视频在线观看| 日韩精品在线中文字幕| 九九色在线观看| 精品国产视频一区二区三区| 精品国产精品久久一区免费式| 免费自拍视频| 影音先锋亚洲视频| 国产v片在线观看| 日日噜噜噜夜夜爽爽| 欧美xxxxx性| 欧美1区2区3| av电影高清在线观看| 亚洲免费在线播放| 国产成人在线观看免费网站| 8av国产精品爽爽ⅴa在线观看| 亚洲自拍偷拍色图| 久久精品国亚洲| 九九热视频精品| 日本亚洲精品在线观看| 国产欧美最新羞羞视频在线观看| 成人高清在线观看免费| 国产精品欧美日韩一区| 中文字幕欧美日本乱码一线二线| 99精品国产高清一区二区麻豆| 婷婷六月天丁香| 羞羞的视频在线| 国产日产一区二区| 国产偷自视频区视频一区二区| 亚洲欧美韩国综合色| 欧美色爱综合| 台湾av在线二三区观看| 午夜在线视频一区二区区别| 久久久久久久91| 激情综合网俺也去| h在线视频免费观看完整版| 婷婷久久综合网| 超碰成人福利网| 无码人妻久久一区二区三区| 成人动漫中文字幕| 日韩在线视频播放| 中文字幕第一页av| 国产成人精品三级麻豆| 精品中文字幕一区二区小辣椒| 在线a人片免费观看视频| 影音先锋国产精品| 中文字幕在线2018| 中文字幕av不卡在线| 国产精品国模在线| 综合在线影院| 久久黄色网页| 久久精品人人| 国产精品影院在线| 日本精品999| 欧美日韩亚洲高清| 日韩精品久久久久久久| 亚洲精华一区二区三区| 国产免费xxx| 天堂网在线最新版www中文网| 欧美日韩少妇| 亚洲成人精品一区二区| hitomi一区二区三区精品| 日韩在线观看一区二区| 国产黄色小视频| 色婷婷精品国产一区二区三区| 日韩视频在线观看免费视频| 午夜亚洲性色福利视频| 国产精品成人一区二区网站软件| 日韩国产激情| 99久久久国产| 午夜精品在线视频一区| 少妇高潮久久久| 中文字幕免费高清视频| 91视频亚洲| 国产精品久久夜| 深夜福利久久| www.自拍偷拍| 色一区二区三区| 欧美成人家庭影院| 久久久久久久少妇| 无码久久精品国产亚洲av影片| 丰满少妇一区二区| 麻豆av电影| 丰满少妇又爽又紧又丰满69| 亚洲一二三四五六区| 天堂中文av在线资源库| 午夜在线不卡| 亚洲国产日韩在线人成电影| 色狠狠色狠狠综合| 成人xxx免费视频播放| 秋霞欧美在线观看| 中文字幕精品综合| 亚洲aaa精品| 亚洲精品国产久| 中文字幕一区二区不卡| 人妻激情另类乱人伦人妻| 国产精品美女久久久久久免费| 精品国产欧美一区二区| 国产999视频| 国产伦精品一区二区三区视频青涩| 亚洲二区三区四区| 亚洲伊人成综合成人网| 一区二区国产在线| 久久久www| 日韩欧美国产三级电影视频| 国产精品久久久久9999| 一区二区三区四区不卡视频| 日本一区二区视频在线播放| 精品国产黄a∨片高清在线| 国产精品白丝jk白祙| 激情综合色综合啪啪开心| 在线免费精品视频| 日本黄色的视频| 亚洲一区自拍偷拍| 久久久99久久| 性做久久久久久久久久| 成人一区二区三| 中文字幕人妻一区二区| 亚洲激情视频网| 熟妇高潮一区二区三区| 国产视频一二三四区| 欧美在线三级电影| 国产精品蜜臀在线观看| 欧美亚洲免费电影| 999视频精品| 91精品啪在线观看国产81旧版| 北岛玲一区二区三区| 一区二区三区在线视频免费观看| 国产在线不卡一卡二卡三卡四卡| 日日摸夜夜爽人人添| 亚洲影视在线观看| 狠狠爱一区二区三区| 五月婷婷开心网| 亚洲精品卡一卡二| www.97视频| 红桃一区二区三区| 国产精品久久久免费观看| 希岛爱理一区二区三区| 国产女人av| 免费的黄网站在线观看| 国产女人爽到高潮a毛片| 日韩精品一区二区三区免费观看| 日韩av在线播放网址| 美女黄a一级视频| 亚洲区一区二| 在线播放evaelfie极品| 92裸体在线视频网站| 91精品久久久久久久久久另类| 亚洲天堂av影院| 性色av无码久久一区二区三区| 亚洲欧美综合7777色婷婷| 亚洲第一黄色网址| 在线视频国产福利| 中文字幕欧美激情| 欧美激情一区二区三区全黄| 黄色av网站在线免费观看| 日本韩国在线不卡| 欧美人与禽zozo性伦| 久久久久无码国产精品一区李宗瑞| 中日韩免视频上线全都免费| 亚洲精品在线一区二区| 天天超碰亚洲| 999视频精品| 国产1卡2卡三卡四卡网站| 国产美女免费观看| 在线观看中文字幕亚洲| 亚洲香蕉伊综合在人在线视看| 污视频在线免费观看一区二区三区| 亚洲一级二级三级在线免费观看| 卡一精品卡二卡三网站乱码| 伊人久久久久久久久久| 久久久久国产一区二区三区四区| 伊人网在线视频观看| 国产亚洲精品bt天堂精选| 久久久久久久久岛国免费| 欧美日本在线视频| 蜜桃av综合| 国产精品一区二区三区精品| 精品免费一区二区三区蜜桃| av片在线看| 欧美精选视频一区二区| 国产精品99精品一区二区三区∴| 在线看中文字幕| 丝袜亚洲精品中文字幕一区| 国产suv精品一区二区三区| www.av成人| 欧美日韩国产一二三| 91亚洲精品视频| 欧美三级韩国三级日本三斤在线观看| 精品三级在线观看视频| 99视频在线免费观看| 欧美日韩一区二区三区在线| 欧美一区日本一区韩国一区| 亚洲国产精品一区二区久久| 色哟哟免费在线观看| 黑丝av在线播放| 91xxx在线观看| 性囗交免费视频观看| 欧美国产高清| 88av看到爽| 在线观看视频你懂的| 岛国成人毛片| 久久香蕉综合色一综合色88| 91视频在线视频| 日韩一级中文字幕| 亚洲av无码久久精品色欲| 色综合视频一区二区三区44| 欧美日韩久久久久久| 中文字幕在线免费视频| 无码av免费一区二区三区试看| 日本成年人网址| 成人免费在线视频网址|