其實你也可以使用SpringBoot自定義starter

使用過SpringBoot的都應(yīng)該知道,一個SpringBoot 項目就是由一個一個 Starter 組成的幅恋,一個 Starter 代表該項目的 SpringBoot 啟動依賴,除了官方已有的 Starter淑翼,我們可以根據(jù)自己的需要自定義新的Starter。? ? ?

一玄括、自定義SpringBoot Starter

自定義Starter,首選需要實現(xiàn)自動化配置银还,而要實現(xiàn)自動化配置需要滿足以下兩個條件:? ? ?

(1)能夠自動配置項目所需要的配置信息洁墙,也就是自動加載依賴環(huán)境戒财;? ? ? ? ??

(2)能夠根據(jù)項目提供的信息自動生成Bean,并且注冊到Bean管理容器中饮寞;? ? ??

要實現(xiàn)自動化配置需要在項目的pom.xml文件中引入如下依賴:? ? ? ?

<dependency>

????<groupId>org.springframework.boot</groupId>

????<artifactId>spring-boot-autoconfigure</artifactId>

????<version>2.1.4.RELEASE</version>

</dependency>

根據(jù)需要自定義Starter的實現(xiàn)過程大致如下(以我定義的Starter為例):?

工程目錄結(jié)構(gòu):

1幽崩、引入項目的配置依賴? ?

<dependency>

????<groupId>org.springframework.boot</groupId>

????<artifactId>spring-boot-autoconfigure</artifactId>

????<version>2.1.4.RELEASE</version>

</dependency>

2、創(chuàng)建xxxService類慌申,完成相關(guān)的操作邏輯? ? ??

代碼:StringService.java

public?class?StringService?{

????private?String?str1;

????private?String?str2;

????private?String?default_str;

????public?String?getStr1()?{

????????return?str1;

????}

????public?void?setStr1(String?str1)?{

????????this.str1?=?str1;

????}

????public?String?getStr2()?{

????????return?str2;

????}

????public?void?setStr2(String?str2)?{

????????this.str2?=?str2;

????}

????public?String?getDefault_str()?{

????????return?default_str;

????}

????public?void?setDefault_str(String?default_str)?{

????????this.default_str?=?default_str;

????}

????public?String?addStr(){

????????if(str1?!=?null){

????????????if(str2?!=?null){

????????????????return?str1?+?"蹄溉,"?+?str2;

?????????}

????????????return?str1;

????????}

????????return?default_str;

????}

}

3、定義xxxProperties類柒爵,屬性配置類,完成屬性配置相關(guān)的操作法瑟,比如設(shè)置屬性前綴唁奢,用于在application.properties中配置? ??

代碼:StringProperties.java

//指定項目在屬性文件中配置的前綴為str,即可以在屬性文件中通過?str.str1=springboot驮瞧,就可以改變屬性類字段?str1?的值了

@SuppressWarnings("ConfigurationProperties")

@ConfigurationProperties(prefix?=?"str")

public?class?StringProperties?{

????public?static?final?String?DEFAULT_STR1?=?"I?know,?you?need?me";

????public?static?final?String?DEFAULT_STR2?=?"but?I?also?need?you";

????private?String?str1?=?DEFAULT_STR1;

????private?String?str2?=?DEFAULT_STR2;

????public?String?getStr1()?{

????????return?str1;

????}

????public?void?setStr1(String?str1)?{

????????this.str1?=?str1;

????}

????public?String?getStr2()?{

????????return?str2;

????}

????public?void?setStr2(String?str2)?{

????????this.str2?=?str2;

????}

}

4. 定義xxxConfigurationProperties類,自動配置類采郎,用于完成Bean創(chuàng)建等工作? ? ??

代碼:StringAutoConfiguration.java

//?定義?java?配置類

@Configuration

//引入StringService

@ConditionalOnClass({StringService.class})

//?將?application.properties?的相關(guān)的屬性字段與該類一一對應(yīng),并生成?Bean

@EnableConfigurationProperties(StringProperties.class)

public?class?StringAutoConfiguration?{

????//?注入屬性類

????@Autowired

????private?StringProperties?stringProperties;

????@Bean

????//?當(dāng)容器沒有這個?Bean?的時候才創(chuàng)建這個?Bean

????@ConditionalOnMissingBean(StringService.class)

????public?StringService?helloworldService()?{

????????StringService?stringService?=?new?StringService();

????????stringService.setStr1(stringProperties.getStr1());

????????stringService.setStr2(stringProperties.getStr2());

????????return?stringService;

????}

}

5淫痰、在resources下創(chuàng)建目錄META-INF整份,在 META-INF 目錄下創(chuàng)建 spring.factories,在SpringBoot啟動時會根據(jù)此文件來加載項目的自動化配置類? ?

代碼:spring.factories

#?Auto?Configure

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lhf.springboot.config.StringAutoConfiguration

6烈评、到這里自定義Starter就定義完成了,只需在其他項目中引入即可使用瓜客。

二竿开、其他項目中使用自定義的Starter

1、 在新項目中引入自定義Starter依賴配置

創(chuàng)建一個新的SpringBoot項目否彩,在項目的pom.xml文件中引入自定義SpringBoot Starter的依賴配置如下:

<!--引入自定義Starter-->

<dependency>

????<groupId>com.lhf.springboot</groupId>

????<artifactId>spring-boot-starter-string</artifactId>

????<version>0.0.1-SNAPSHOT</version>

</dependency>

2、編寫一個簡單的Controller

@RestController

public?class?StringController?{

??????@Autowired

????private?StringService?stringService;??//引入自定義Starter中的StringService

????@RequestMapping("/")

??????public?String?addString(){

????????return?stringService.addStr();

????}

}


3敬尺、編寫屬性配置文件贴浙,內(nèi)容如下:

#配置自定義的屬性信息

str.str1=為什么我的眼里常含淚水

str.str2=那是因為我對你愛的深沉

4、 啟動項目進行訪問悬而,效果如圖:

結(jié)語:

到此SpringBoot自定義Starter的過程以及用法就完了笨奠,分享就到這里了!如果是有需要Java學(xué)習(xí)資料的般婆,可以點擊進入,暗號:jsgg乡范,各個方面的資料都有,免費提供晋辆!大家一起學(xué)習(xí)進步。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霸饲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厚脉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融涣,死亡現(xiàn)場離奇詭異精钮,居然都是意外死亡剃斧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門臂容,熙熙樓的掌柜王于貴愁眉苦臉地迎上來根蟹,“玉大人脓杉,你說我怎么就攤上這事简逮。” “怎么了蕉堰?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵悲龟,是天一觀的道長。 經(jīng)常有香客問我须教,道長,這世上最難降的妖魔是什么乐疆? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮诀拭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘细卧。我一直安慰自己筒占,他們只是感情好贪庙,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布止邮。 她就那樣靜靜地躺著奏窑,像睡著了一般导披。 火紅的嫁衣襯著肌膚如雪埃唯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天止毕,我揣著相機與錄音漠趁,去河邊找鬼。 笑死闯传,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甥绿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纬朝,長吁一口氣:“原來是場噩夢啊……” “哼骄呼!你這毒婦竟也來了判没?” 一聲冷哼從身側(cè)響起隅茎,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辟犀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂毁,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡出嘹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烦秩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郎仆。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扰肌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤猴凹,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站沼头,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏进倍。R本人自食惡果不足惜购对,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骡苞。 院中可真熱鬧楷扬,春花似錦贴见、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廊鸥。三九已至站粟,卻和暖如春黍图,著一層夾襖步出監(jiān)牢的瞬間奴烙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工揩环, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幅虑,地道東北人丰滑。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓褒墨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親郁妈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容