国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

手寫自定義SpringBoot-Starter,感受框架的魅力和原理

開發 架構
Springboot的自動配置原理,面試中經常問到,一直看也記不住,不如手寫一個Starter,加深一下記憶。

一、前言

Springboot的自動配置原理,面試中經常問到,一直看也記不住,不如手寫一個starter,加深一下記憶。看了之后發現大部分的starter都是這個原理,實踐才會記憶深刻。核心思想:約定大于配置。

二、初探starter啟動原理

我們直接看看官網的starter是怎么設計的,仿照這寫一個就行了!

我們Ctrl點擊<artifactId>spring-boot-starter-web</artifactId>,進入內部pom,我們發現里面有個。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.3</version>
<scope>compile</scope>
</dependency>

在此Ctrl點擊<artifactId>spring-boot-starter</artifactId>進入starter內部pom:我們發現之后干活的就是這個包依賴:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.5.3</version>
<scope>compile</scope>
</dependency>

圖片

我們現在創建兩個項目即可:

  • spring-boot-starter(啟動器)
  • spring-boot-starter-autoconfigure(自動配置包)

小編看到官方這么寫的提醒,大家可以按照官網的進行起名稱,不要學小編哈!!

您應該確保為您的啟動器提供適當的命名空間。不要以 . 開頭的模塊名稱spring-boot,即使您使用不同的 Maven groupId。我們將來可能會為您自動配置的內容提供官方支持。
根據經驗,您應該在啟動器之后命名組合模塊。例如,假設您正在為“acme”創建一個啟動器,并且您命名自動配置模塊acme-spring-boot和啟動器acme-spring-boot-starter。如果您只有一個模塊將兩者結合起來,請將其命名為acme-spring-boot-starter.

三、項目搭建

1、新建空白項目

圖片

輸入總的項目名稱:

圖片

在空白項目里新建兩個,這里可以分開單獨建立,這里小編跟著雷神一樣了,就不單獨建立項目了!

圖片

2、新建maven項目

圖片

包名和名稱:

圖片

3、新建springboot項目

圖片

4、項目架構

這里把沒有用的都刪除了!!可以不刪。

圖片

四、配置

1、在starter項目中引入自己的autoconfigure依賴

就是上面建立項目的設置的。

<dependencies>
<dependency>
<groupId>com.wang</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>

圖片

2、spring-boot-autoconfigure pom配置

<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>

還是把沒用的東西刪除了,剩余如下圖:

圖片

五、編寫autoconfigure項目

1、配置一個bean

首先刪除了自動啟動類,咱們用不到,在spring-boot-autoconfigure項目中新建一個bean,此時不需要讓這個bean在容器中,我們寫一個自己配置,讓他自動加入到容器中。
這就是自動配置的思想。

/**
* 這里不需要讓在容器中,我們寫一個自己配置,讓他自動加入到容器中
* @author wangzhenjun
* @date 2022/10/14 16:26
*/
public class HelloService {

@Autowired
private MyProperties myProperties;

public String HelloWord (String username){
return myProperties.getPrefix() + username + myProperties.getSuffix();
}
}

2、編寫一個配置文件

這里為了獲取配置文件中的屬性值,springboot自動配置源碼里大部分都是,這樣實現在一個配置文件中書寫,其他的可以按照開頭獲取到屬性和值!

/**
* @author wangzhenjun
* @date 2022/10/14 16:28
*/
@Data
@ConfigurationProperties("wang.name")
public class MyProperties {

private String prefix;
private String suffix;
}

3、編寫自動配置

import com.wang.springbootautoconfigure.properties.MyProperties;
import com.wang.springbootautoconfigure.service.HelloService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* @author wangzhenjun
* @date 2022/10/14 16:33
*/
@Configuration
//沒有這個bean的時候才會生效
@ConditionalOnMissingBean(HelloService.class)
// 加載配置文件,讓它成為容器中的bean
@EnableConfigurationProperties(MyProperties.class)
public class ServiceAutoConfiguration {
/**
* 把剛剛寫的服務,加入到容器中
*/
@Bean
public HelloService helloService (){

return new HelloService();
}
}

主要就是condition下的幾個注解,來完成bean是否加入到容器中:
常用的:

  • @ConditionalOnClass
  • @ConditionalOnMissingClass
  • @ConditionalOnBean
  • @ConditionalOnMissingBean
  • @ConditionalOnProperty

圖片

4、新建spring.factories

我們看到源碼里自動配置,就是從這個文件獲取加載,所以我們模仿這新建一個,這樣就可以掃描加入容器中!

圖片

如果是springboot2.7以上就是:文件夾名稱:META-INF.spring文件名稱:org.springframework.boot.autoconfigure.AutoConfiguration.imports。

圖片

里面直接寫全類名即可!

5、打包

先把spring-boot-autoconfigure?打包到本地庫,在打包spring-boot-starter,順序一定要有,不然找不到前者的包!

圖片

六、測試

我們那一個新項目進行測試,新項目小編就不帶大家建了!

1、導入咱們的starter依賴

<dependency>
<groupId>com.wang</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

2、添加配置文件

wang:
name:
prefix: hello
suffix: 886

圖片

3、新建controller測試類

@RestController
@RequestMapping("/test")
public class TestController {

@Autowired
private HelloService helloService;

@GetMapping("/starter")
public String starter(){

return helloService.HelloWord("tom");
}
}

4、測試訪問

成功訪問,不過中文是有亂碼的,小編找不到解決方法,有懂的還請留言告知!!
主流程通了就行,慢慢理解了自動配置的魅力!
總流程應該就是這樣的:

引入starter --- xxxAutoConfiguration --- 容器中放入組件 ---- 綁定xxxProperties ---- 配置項。

圖片

中文是亂碼,可能是servlet沒有吧,有懂的可以留言告訴小編方案,謝謝大家!

圖片

七、總結

一看會就,一動手就廢!大家還是要做自己實操,不要眼高手低,這樣才會有收獲,根本就是約定大于配置+SPI發現機制!還有就是一些經常出現在源碼里的注解,大家記住就可以自己寫starter了!

責任編輯:姜華 來源: 小王博客基地
相關推薦

2023-02-27 09:38:36

Springbootstarter

2021-01-14 19:04:36

框架數據庫mybatis

2019-08-08 16:30:23

技術編程SpringBoot

2022-09-13 09:02:19

SpringBootStarter機制

2009-06-25 14:53:35

自定義UI組件JSF框架

2023-10-11 07:57:23

springboot微服務

2023-06-06 08:01:18

自定義接口響應

2009-12-17 17:00:32

無線路由linksys

2009-07-07 14:32:47

JDK日志Formatter

2024-11-18 09:18:21

Gin框架驗證器

2023-07-03 08:29:11

BannerSpringBoot

2020-05-21 18:52:06

PHP框架CodeigniterWeb開發

2022-09-23 07:33:04

Springzookeeper配置

2023-11-01 08:01:04

SpringWeb容器

2015-02-12 15:33:43

微信SDK

2015-01-14 15:06:48

定義相機

2021-12-30 12:30:01

Java注解編譯器

2009-07-07 14:00:25

JDK日志Handler

2018-03-16 08:41:16

Oracle存儲函數

2015-02-12 15:38:26

微信SDK
點贊
收藏

51CTO技術棧公眾號

激情视频国产| 日本成人福利| 精品国产一区二区三区在线观看| 美日韩中文字幕| 日韩国产一级片| 色天天综合久久久久综合片| 午夜无码国产理论在线| 成人做爰66片免费看网站| 91视频在线观看免费| 国产有码在线| 91丨九色丨国产在线| 亚洲一区二区中文在线| 免费一级在线观看播放网址| 97在线视频免费播放| 久久国产精品免费| 一级视频在线观看视频在线啦啦| 欧美成aaa人片在线观看蜜臀| 国产精品资源站在线| 1区2区3区在线| 91嫩草免费看| 黄色av日韩| 91在线精品| 538国产精品视频一区二区| 亚洲一区二区三区自拍| 大桥未久在线视频| 国产精品.com| 欧美视频一区二区三区在线观看 | 久久精品人人做人人爽电影| 欧美高清www午色夜在线视频| 亚洲自拍另类| 午夜精品视频网站| www.日本一区| 日韩免费不卡av| 亚洲国产精品精华液网站| 国产亚洲欧美日韩在线一区| 最新欧美电影| 91精品国产91久久久久麻豆 主演| 亚洲级视频在线观看免费1级| 中文字幕在线一区二区三区| 亚洲大胆人体大胆做受1| 国产伦精品一区二区三区四区视频| 欧美日韩一二三| 精品成人国产| eeuss影院www在线播放| 国产精品9999| 欧美在线free| 牛牛精品视频在线| 97人人模人人爽人人少妇| 欧美午夜在线一二页| 竹菊久久久久久久| 成人在色线视频在线观看免费大全| 欧美一级理论性理论a| 国产深夜精品| 欧美色18zzzzxxxxx| 国产精品电影观看| 在线免费观看视频一区| 蜜桃视频一区二区三区在线观看| 欧美第一页浮力影院| 欧美在线制服丝袜| 老**午夜毛片一区二区三区| 蜜臀av在线| 国产精自产拍久久久久久| 99精品国产91久久久久久 | 男人天堂手机在线| 糖心vlog在线免费观看| 欧美野外猛男的大粗鳮| 91麻豆精品国产91久久久使用方法| 福利一区二区在线观看| 夜间精品视频| 北条麻妃一区二区三区在线观看 | 丁香五精品蜜臀久久久久99网站| 日本高清免费电影一区| 视频欧美精品| 色爱综合区网| 1024在线视频| 国产精品va在线观看无码| 成人欧美一区二区三区在线湿哒哒| 亚洲视频在线看| 亚洲视频在线一区观看| 91精品啪在线观看国产18| 亚洲精品一二三**| 亚洲精华液一区二区三区| a黄色在线观看| 特黄特黄的视频| 色就是色欧美| 久久精品国产电影| 亚洲国产精品激情在线观看| 日韩一区电影| 四虎地址8848精品| 天堂电影在线| 少妇高清精品毛片在线视频| 久久偷看各类wc女厕嘘嘘偷窃| 日韩av片免费在线观看| 亚洲欧美一区二区三区情侣bbw| 色播五月激情综合网| 99re视频精品| 视频在线在亚洲| 国产中文一区| 杨幂一区二区三区免费看视频| 日日夜夜一区| 91成人短视频在线观看| 欧美亚洲日本精品| 美女的胸无遮挡在线观看| 国产激情在线视频| 欧美日韩亚洲一区二区三区四区| 78色国产精品| 综合av色偷偷网| 日韩欧美国产网站| 狠狠色丁香久久婷婷综| 久久尤物视频| 韩国欧美国产一区| 91丝袜呻吟高潮美腿白嫩在线观看| 99久久精品情趣| 中文字幕一区二区三区乱码在线 | 成人有码在线视频| 国产欧美一区二区在线播放| 欧美国产视频在线观看| 日本一区二区三区四区在线观看 | 国产欧美日韩在线| 性久久久久久久久久久久| 日韩午夜在线观看视频| 久久久久亚洲精品国产| 久久精品国产理论片免费| 亚洲色图狂野欧美| 忘忧草在线日韩www影院| 欧美一区二区三区在线视频| 亚洲黄色录像片| 精品免费在线视频| 色青青草原桃花久久综合| 日韩美女写真福利在线观看| 天堂8中文在线| 久久综合久久综合亚洲| 五月婷婷另类国产| 久久激情五月丁香伊人| 97精品伊人久久久大香线蕉| 国内精品第一页| 国产66精品久久久久999小说| 中文字幕亚洲乱码| 一区二区三区午夜探花| 欧美三级日韩在线| 欧洲亚洲一区二区三区四区五区| 爱情电影网av一区二区| 欧美日韩免费区域视频在线观看| 一区二区三区|亚洲午夜| 久久久久久久久久久久久久久久久久| 欧美性猛xxx| www欧美激情| 精品一区二区免费在线观看| 樱桃国产成人精品视频| 欧美夫妻性生活视频| av在线播放天堂| 噜噜噜在线观看免费视频日韩| 亚洲一区 在线播放| 自拍偷拍亚洲欧美日韩| 9999精品成人免费毛片在线看| 亚洲精品小视频| 图片一区二区| 天天综合色天天| 韩国精品一区二区三区六区色诱| 女人天堂在线| 国产精品久久久久久久久久直播 | 亚洲va久久久噜噜噜久久| 欧美日韩国产在线观看| 性网站在线看| 1024亚洲合集| 中文字幕第38页| 久久精品国产一区二区三区免费看| 热99在线视频| 亚瑟国产精品| 亚洲色图综合久久| 超碰资源在线| 极品销魂美女一区二区三区| 久久99精品久久久久久水蜜桃 | av在线不卡网| 日韩av一区二区三区在线观看| 99国产精品一区二区| 久久久久久久久亚洲| 日韩高清不卡| 亚洲欧美国产高清va在线播| 免费人成黄页在线观看忧物| 中文字幕欧美国产| 欧美日韩在线免费播放| 国产电影精品久久禁18| 美女三级99| 欧美午夜不卡影院在线观看完整版免费| 日韩美女视频免费看| 亚洲免费看片| 久久韩国免费视频| 精品三级av| 国产精品91久久久久久| 日韩在线看片| 欧美国产日韩免费| 国产伦乱精品| 国产精品自在线| 国语自产精品视频在线看8查询8| 97超碰人人看人人| 亚洲经典在线看| 欧美 另类 交| 国产精品理论在线观看| 在线观看免费视频一区二区三区|