1. 程式人生 > >SpringBoot詳解(二)-Spring Boot的核心

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

Spring Boot的核心

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

1、@SpringBootApplication

前面已經說過了,一般Spring Boot的Web應用都有一個xxxApplication類,並使用@SpringBootApplication註解標記,作為該web應用的載入入口。那這個@SpringBootApplication註解到底是何方神聖?通過檢視它的原始碼,可以發現它是一個組合註解:

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

1)@SpringBootConfiguration

@SpringBootConfiguration是Spring Boot專案的配置註解,這也是一個組合註解。

通過上圖程式碼,結合前面所講的知識,不難猜測出@SpringBootConfiguration與@Configuration存在著某種關係,可以認為@SpringBootConfiguration就相當於@Configuration,在Spring Boot專案中推薦使用@SpringBootConfiguration替代@Configuration,不過因為註釋長度問題,往往@Configuration較為常用。

2)@EnableAutoConfiguration

@EnableAutoConfiguration註解用於啟用自動配置,該註解會使Spring Boot根據專案中依賴的jar包自動配置專案的配置項。

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

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

3)@ComponentScan

@ComponentScan是元件掃描註解,不配置預設掃描@SpringBootApplication所在類的同級目錄以及它的子目錄(這很重要,後面很應用到這個特性)。當然你也可以自己指定要掃描的包目錄,例如:

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

2、取消部分自動配置

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

當自動配置的東西一多了,就容易出問題,上篇中最後出現的”Cannot determine embedded database driver class for database type NONE”錯誤,就是因為springboot啟動時會自動注入資料來源和配置jpa,所以我們就需要取消Spring Boot的部分自動配置。至於取消自動配置的方式也相當簡單,就是對@SpringBootApplication註解的exclude進行賦值即可,如:

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

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

3、自定義Banner

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

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

執行專案,然後控制檯就可以輸出banner.txt中的文字了。

4、Starter pom

Spring Boot為我們提供了簡化企業級開發絕大多數場景的start pom(類似於元件),只要使用了對應的starter pom,Spring Boot就會為我們提供自動配置的Bean。

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

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

5、使用Xml配置檔案

常規開發中,java配置方式已經可以完全取代xml配置方式了,但有時我們並不想使用java配置,而是繼續沿用之前的xml配置方式,或者出於其他原因,一定要在xml中進行配置,那該怎麼辦呢,很簡單,使用@ImportResource註解即可:

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

6、全域性配置檔案

Spring Boot專案使用一個全域性的配置檔案application.properties或者是application.yml,在resources目錄下或者類路徑下的/config下,一般我們放到resources下。

我們知道Spring Boot會根據在pom.xml中依賴的jar包進行自動配置,當我們要對這些jar包對應的框架進行配置又該怎麼辦呢,沒錯,可以在全域性配置檔案(application.properties或者是application.yml)中進行配置,如tomcat的埠配置等。

1)全域性配置檔案的基本使用(application.properties)

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

①tomcat埠配置

server.port=8888

②修改Spring MVC攔截路徑規則

預設Spring MVC攔截路徑規則是/,如果要修改成*.html的話,可以在全域性配置檔案中進行如下設定:

server.servlet-path=*.html

③檢視解析器配置

一樣的,Spring Boot也可以通過全域性配置檔案對檢視解析器進行配置:

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

④日誌輸出

Spring Boot對各種日誌框架都做了支援,我們可以通過配置來修改預設的日誌的配置:

#設定日誌級別
logging.level.org.springframework=DEBUG

2)全域性配置檔案的進階使用(application.yml)

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

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

server:
  port: 8080
  context-path: /

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

logging:
  level: debug

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

①自定義屬性

全域性配置檔案並不只是配置Spring Boot中已經存在的屬性,我們也可以自定義屬性(別忘了,它本身就是一個properties檔案),程式碼需要使用@Value(“${xxx}”)註解來獲取這些屬性,如:

②屬性引用屬性

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

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

③屬性轉物件

這個就比較有看點了,以上面的”server.port: 8080”為例,我們可以認為是Server這個類中有一個port屬性,其值為8080。可以使用@ConfigurationProperties(prefix = “屬性名字首”)這個註解作為配置檔案中屬性轉物件屬性的橋樑,具體如圖所示:

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