SpringBoot詳解(二)-Spring Boot的核心

SpringBoot詳解系列文章:
SpringBoot詳解(一)-快速入門
SpringBoot詳解(二)-Spring Boot的核心
SpringBoot詳解(三)-Spring Boot的web開發(fā)
SpringBoot詳解(四)-優(yōu)雅地處理日志

Spring Boot的核心

在上篇中我們成功運行了一個簡單的web應(yīng)用,其中有一個注解被輕易的帶過了,但它在Spring Boot中是最重要的注解,沒有之一,它就是@SpringBootApplication,本篇將對它與Spring Boot的配置進行深入的介紹。

1、@SpringBootApplication

前面已經(jīng)說過了,一般Spring Boot的Web應(yīng)用都有一個xxxApplication類,并使用@SpringBootApplication注解標(biāo)記,作為該web應(yīng)用的加載入口。那這個@SpringBootApplication注解到底是何方神圣?通過查看它的源碼,可以發(fā)現(xiàn)它是一個組合注解:

@SpringBootApplication這個Spring Boot核心注解是由其它三個重要的注解組合,分別是: @SpringBootConfiguration 、 @EnableAutoConfiguration 和 @ComponentScan。

1)@SpringBootConfiguration

@SpringBootConfiguration是Spring Boot項目的配置注解,這也是一個組合注解。

通過上圖代碼,結(jié)合前面所講的知識,不難猜測出@SpringBootConfiguration與@Configuration存在著某種關(guān)系,可以認為@SpringBootConfiguration就相當(dāng)于@Configuration,在Spring Boot項目中推薦使用@SpringBootConfiguration替代@Configuration,不過因為注釋長度問題,往往@Configuration較為常用。

2)@EnableAutoConfiguration

@EnableAutoConfiguration注解用于啟用自動配置,該注解會使Spring Boot根據(jù)項目中依賴的jar包自動配置項目的配置項。

例如:上篇中,我們在編寫第一個WEB應(yīng)用時,就在pom.xml中引入了spring-boot-starter-web的依賴,所以項目中就會引入SpringMVC的依賴,就會自動配置tomcat和SpringMVC。

還有后面使用事務(wù)時,會引入spring-boot-starter-jdbc的依賴,讓Spring Boot自動配置DataSourceTransactionManager或JpaTransactionManager,等等。。

3)@ComponentScan

@ComponentScan是組件掃描注解,不配置默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄(這很重要,后面很應(yīng)用到這個特性)。當(dāng)然你也可以自己指定要掃描的包目錄,例如:

@ComponentScan(basePackages = "com.lqr.demo1")

2、取消部分自動配置

上面說了,Spring Boot根據(jù)項目中依賴的jar包自動配置項目的配置項,而Spring Boot支持的自動配置非常之多,如下圖所示(只是其中的一部分):

當(dāng)自動配置的東西一多了,就容易出問題,上篇中最后出現(xiàn)的"Cannot determine embedded database driver class for database type NONE"錯誤,就是因為springboot啟動時會自動注入數(shù)據(jù)源和配置jpa,所以我們就需要取消Spring Boot的部分自動配置。至于取消自動配置的方式也相當(dāng)簡單,就是對@SpringBootApplication注解的exclude進行賦值即可,如:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@Controller
public class HelloApplication {
    ...
}

其他的取消自動配置以此類推。

3、自定義Banner

這個知識點其實對開發(fā)意義不太,但不妨了解下(可以裝個逼~~)。在Spring Boot項目啟動時,控制臺會輸出一個"spring>>>"的banner文字圖案,如:

這個banner是可以自定義的,自定義的方法很簡單:只需要把想輸出的文字保存在banner.txt文件中,然后把這個banner.txt放到resources目錄下即可:

運行項目,然后控制臺就可以輸出banner.txt中的文字了。

Text to ASCII Art Generator (TAAG)這個網(wǎng)站可以得到文字圖案。

4、Starter pom

Spring Boot為我們提供了簡化企業(yè)級開發(fā)絕大多數(shù)場景的start pom(類似于組件),只要使用了對應(yīng)的starter pom,Spring Boot就會為我們提供自動配置的Bean。

這里官方給出的starter,以下是"好心人"對這些Starter pom做的翻譯:

怎么使用?直接在pom.xml中引入依賴即可(不懂請參考上篇中“第一個Web應(yīng)用”中pom.xml配置的第二部分,或請自行百度)。

5、使用Xml配置文件

常規(guī)開發(fā)中,java配置方式已經(jīng)可以完全取代xml配置方式了,但有時我們并不想使用java配置,而是繼續(xù)沿用之前的xml配置方式,或者出于其他原因,一定要在xml中進行配置,那該怎么辦呢,很簡單,使用@ImportResource注解即可:

@ImportResource(value = {"classpath:xxx1.xml","classpath:xxx2.xml"})

6、全局配置文件

Spring Boot項目使用一個全局的配置文件application.properties或者是application.yml,在resources目錄下或者類路徑下的/config下,一般我們放到resources下。

我們知道Spring Boot會根據(jù)在pom.xml中依賴的jar包進行自動配置,當(dāng)我們要對這些jar包對應(yīng)的框架進行配置又該怎么辦呢,沒錯,可以在全局配置文件(application.properties或者是application.yml)中進行配置,如tomcat的端口配置等。

1)全局配置文件的基本使用(application.properties)

這部分使用application.properties中的書寫方式來介紹。

①tomcat端口配置

server.port=8888

②修改Spring MVC攔截路徑規(guī)則

默認Spring MVC攔截路徑規(guī)則是/,如果要修改成*.html的話,可以在全局配置文件中進行如下設(shè)置:

server.servlet-path=*.html

③視圖解析器配置

一樣的,Spring Boot也可以通過全局配置文件對視圖解析器進行配置:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

④日志輸出

Spring Boot對各種日志框架都做了支持,我們可以通過配置來修改默認的日志的配置:

#設(shè)置日志級別
logging.level.org.springframework=DEBUG

2)全局配置文件的進階使用(application.yml)

這部分使用application.yml中的書寫方式來介紹。

properties與yml文件在形式上有所差別,yml文件的書寫方式比較簡潔,類似eclipse中package的flag呈現(xiàn)方式(而properties文件則像Hierarchical方式)。如上面properties文件中的屬性配置使用yml文件來寫:

server:
  port: 8080
  context-path: /

spring:
    mvc:
      view:
        prefix: /WEB-INF/views/
        suffix: .jsp

logging:
  level: debug

yml文件在書寫時,需要注意一個地方:冒號與值中間是存在空格的!

①自定義屬性

全局配置文件并不只是配置Spring Boot中已經(jīng)存在的屬性,我們也可以自定義屬性(別忘了,它本身就是一個properties文件),代碼需要使用@Value("${xxx}")注解來獲取這些屬性,如:

②屬性引用屬性

屬性引用屬性也簡單,使用${xxx}就可以引用配置文件中的屬性了。

lqr: 666
content: "${lqr} is six six six"

③屬性轉(zhuǎn)對象

這個就比較有看點了,以上面的"server.port: 8080"為例,我們可以認為是Server這個類中有一個port屬性,其值為8080。可以使用@ConfigurationProperties(prefix = "屬性名前綴")這個注解作為配置文件中屬性轉(zhuǎn)對象屬性的橋梁,具體如圖所示:

Spring Boot的全局配置很強大,同時它可以配置的屬性也很多,以上只列出幾個常用的屬性配置,如需查看完整的全局屬性配置,請到spring-boot官方配置文檔查看。好了,本篇到此結(jié)束,主要介紹了Spring Boot中幾個核心注解與自動配置,同時解決上篇中的幾個問題,從下篇開始,將針對Spring Boot的web開發(fā)進行介紹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,334評論 2 377

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