自定義配置

1.7 自定義配置


?????????spring Boot免除了項(xiàng)目中大部分的手動(dòng)配置,對(duì)于一些特定情況哑芹,我們可以通過修改全局配置文件以適應(yīng)具體生產(chǎn)環(huán)境,可以說,幾乎所有的配置都可以寫在application.peroperties文件中干茉,Spring Boot會(huì)自動(dòng)加載全局配置文件從而免除我們手動(dòng)加載的煩惱。但是很泊,如果我們自定義配置文件角虫,Spring Boot是無法識(shí)別這些配置文件的,此時(shí)就需要我們手動(dòng)加載委造。接下來戳鹅,將針對(duì)Spring

Boot的自定義配置文件及其加載方式進(jìn)行

1.7.1 使用@PropertySource加載配置文件

?????????對(duì)于這種加載自定義配置文件的需求,可以使用@PropertySource注解結(jié)合@Configuration注解配置類的方式來實(shí)現(xiàn)争涌。@PropertySource注解用于指定自定義配置文件的具體位置和名稱粉楚。同時(shí),為了保證Spring Boot能夠掃描該注解亮垫,還需要類上添加@Configuration注解將實(shí)體類作為自定義配置類模软。

當(dāng)然,如果需要將自定義配置文件中的屬性值注入到對(duì)應(yīng)類的屬性中饮潦,可以使用@ConfigurationProperties或者@Value注解進(jìn)行屬性值注入 ?

演示:

?????(1)打開Spring Boot項(xiàng)目的resources目錄燃异,在項(xiàng)目的類路徑下新建一個(gè)test.properties自定義配置文件,在該配置文件中編寫需要設(shè)置的配置屬性

`properties

#對(duì)實(shí)體類對(duì)象MyProperties進(jìn)行屬性配置

test.id=110

test.name=test


????(2)在com.lagou.pojo包下新創(chuàng)建一個(gè)配置類MyProperties继蜡,提供test.properties自定義配置文件中對(duì)應(yīng)的屬性回俐,并根據(jù)@PropertySource注解的使用進(jìn)行相關(guān)配置?

java

????? @Configuration??? //自定義配置類

????? @PropertySource("classpath:test.properties")?? //指定自定義配置文件位置和名稱

????? @EnableConfigurationProperties(MyProperties.class)//開啟對(duì)應(yīng)配置類的屬性注入功能

????? @ConfigurationProperties(prefix ="test")????? //指定配置文件注入屬性前綴

????? public class MyProperties {

????? ???private int id;

????? ???private String name;

????? ???//省略屬性getXX()和setXX()方法

????? ???//省略toString()方法

?}

?????????主要是一個(gè)自定義配置類,通過相關(guān)注解引入了自定義的配置文件稀并,并完成了自定義屬性值的注入仅颇。針對(duì)示例中的幾個(gè)注解,具體說明如下 ?

* @Configuration注解表示當(dāng)前類是一個(gè)自定義配置類碘举,并添加為Spring容器的組件忘瓦,這里也可以使用傳統(tǒng)的@Component注解;

*@PropertySource("classpath:test.properties")注解指定了自定義配置文件的位置和名稱引颈,此示例表示自定義配置文件為classpath類路徑下的test.properties文件耕皮;

* @ConfigurationProperties(prefix =

"test")注解將上述自定義配置文件test.properties中以test開頭的屬性值注入到該配置類屬性中。

* 如果配置類上使用的是@Component注解而非@Configuration注解蝙场,那么@EnableConfigurationProperties注解還可以省略 ?

(3)進(jìn)行測(cè)試

java

?@Autowired

?private MyProperties myProperties;

?@Test

?public void myPropertiesTest() {

???System.out.println(myProperties);

? }

打印結(jié)果:

<img

src="./images/image-20191225162728286.png"

alt="image-20191225162728286" style="zoom:80%;" />

1.7.2??使用@Configuration編寫自定義配置類

在Spring Boot框架中凌停,推薦使用配置類的方式向容器中添加和配置組件 ?

在Spring Boot框架中,通常使用@Configuration注解定義一個(gè)配置類售滤,Spring Boot會(huì)自動(dòng)掃描和識(shí)別配置類罚拟,從而替換傳統(tǒng)Spring框架中的XML配置文件。

當(dāng)定義一個(gè)配置類后,還需要在類中的方法上使用@Bean注解進(jìn)行組件配置舟舒,將方法的返回對(duì)象注入到Spring容器中拉庶,并且組件名稱默認(rèn)使用的是方法名,當(dāng)然也可以使用@Bean注解的name或value屬性自定義組件的名稱 ?

演示:

(1)在項(xiàng)目下新建一個(gè)com.lagou.config包秃励,并在該包下新創(chuàng)建一個(gè)類MyService氏仗,該類中不需要編寫任何代碼?

java

public class MyService {

}

創(chuàng)建了一個(gè)空的MyService類,而該類目前沒有添加任何配置和注解夺鲜,因此還無法正常被Spring Boot掃描和識(shí)別 ?

(2) 在項(xiàng)目的com.lagou.config包下皆尔,新建一個(gè)類MyConfig,并使用@Configuration注解將該類聲明一個(gè)配置類币励,內(nèi)容如下:

java

????? @Configuration? //定義該類是一個(gè)配置類

????? public class MyConfig {

????? ???@Bean??????? //將返回值對(duì)象作為組件添加到Spring容器中慷蠕,該組件id默認(rèn)為方法名

????? ???public MyService myService(){

????? ???????return new MyService();

????? ??? }

?????? }

?????????MyConfig是@Configuration注解聲明的配置類(類似于聲明了一個(gè)XML配置文件),該配置類會(huì)被Spring Boot自動(dòng)掃描識(shí)別食呻;使用@Bean注解的myService()方法流炕,其返回值對(duì)象會(huì)作為組件添加到了Spring容器中(類似于XML配置文件中的<bean>標(biāo)簽配置),并且該組件的id默認(rèn)是方法名myService

(3)測(cè)試類

java

@Autowired

private ApplicationContext

applicationContext;

@Test

public void iocTest() {

?????? System.out.println(applicationContext.containsBean("myService"));

}

上述代碼中仅胞,先通過@Autowired注解引入了Spring容器實(shí)例ApplicationContext每辟,然后在測(cè)試方法iocTest()中測(cè)試查看該容器中是否包括id為myService的組件。

執(zhí)行測(cè)試方法iocTest() 干旧,查看控制臺(tái)輸出效果渠欺,結(jié)果如下:

<img src="./images/image-20191225170545727.png"

alt="image-20191225170545727" style="zoom:80%;" />

?從測(cè)試結(jié)果可以看出,測(cè)試方法iocTest()運(yùn)行成功椎眯,顯示運(yùn)行結(jié)果為true挠将,表示Spirng的IOC容器中也已經(jīng)包含了id為myService的實(shí)例對(duì)象組件,說明使用自定義配置類的形式完成了向Spring容器進(jìn)行組件的添加和配置

剛學(xué)了拉勾教育的《Java工程師高薪訓(xùn)練營(yíng)》编整,看到剛學(xué)到的點(diǎn)就回答了舔稀。希望拉勾能給我推到想去的公司,目標(biāo):字節(jié)U撇狻镶蹋!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赏半,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淆两,老刑警劉巖断箫,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秋冰,居然都是意外死亡仲义,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃撵,“玉大人赵颅,你說我怎么就攤上這事台妆★踉耄” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵冬殃,是天一觀的道長(zhǎng)谣拣。 經(jīng)常有香客問我募寨,道長(zhǎng),這世上最難降的妖魔是什么森缠? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任拔鹰,我火速辦了婚禮,結(jié)果婚禮上贵涵,老公的妹妹穿的比我還像新娘列肢。我一直安慰自己,他們只是感情好宾茂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布瓷马。 她就那樣靜靜地躺著,像睡著了一般决采。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坟奥,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天树瞭,我揣著相機(jī)與錄音,去河邊找鬼爱谁。 笑死晒喷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的访敌。 我是一名探鬼主播凉敲,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寺旺!你這毒婦竟也來了爷抓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤阻塑,失蹤者是張志新(化名)和其女友劉穎蓝撇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈莽,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渤昌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年虽抄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片独柑。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迈窟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忌栅,到底是詐尸還是另有隱情车酣,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布狂秘,位于F島的核電站骇径,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏者春。R本人自食惡果不足惜破衔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钱烟。 院中可真熱鬧晰筛,春花似錦、人聲如沸拴袭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拥刻。三九已至怜瞒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間般哼,已是汗流浹背吴汪。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒸眠,地道東北人漾橙。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像楞卡,于是被迫代替她去往敵國(guó)和親霜运。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349