SpringBoot(二)之核心

Spring Boot的核心

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

一、@SpringBootApplication

前面已經說過了,通常Spring Boot的Web應用都有一個xxxApplication類,並使用@SpringBootApplication註解標記,做爲該web應用的加載入口。那這個@SpringBootApplication註解究竟是何方神聖?經過查看它的源碼,能夠發現它是一個組合註解:java

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...省略...
}

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

1)@SpringBootConfiguration

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

經過上圖代碼,結合前面所講的知識,不難猜想出@SpringBootConfiguration與@Configuration存在着某種關係,能夠認爲@SpringBootConfiguration就至關於@Configuration,在Spring Boot項目中推薦使用@SpringBootConfiguration替代@Configuration,不過由於註釋長度問題,每每@Configuration較爲經常使用。web

2)@EnableAutoConfiguration

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

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

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

3)@ComponentScan

@ComponentScan是組件掃描註解,不配置默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄(這很重要,後面很應用到這個特性)。固然你也能夠本身指定要掃描的包目錄,例如:mvc

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

二、取消部分自動配置

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

 

當自動配置的東西一多了,就容易出問題,上篇中最後出現的"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 {
    ...
}

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

三、自定義Banner

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

這個banner是能夠自定義的,自定義的方法很簡單:只須要把想輸出的文字保存在banner.txt文件中,而後把這個banner.txt放到resources目錄下便可:

運行項目,而後控制檯就能夠輸出banner.txt中的文字了。

Text to ASCII Art Generator (TAAG)這個網站能夠獲得文字圖案。

四、Starter pom

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

這裏官方給出的starter,如下是"好心人"對這些Starter pom作的翻譯:

 

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

五、使用Xml配置文件

常規開發中,java配置方式已經能夠徹底取代xml配置方式了,但有時咱們並不想使用java配置,而是繼續沿用以前的xml配置方式,或者出於其餘緣由,必定要在xml中進行配置,那該怎麼辦呢,很簡單,使用@ImportResource註解便可:

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

六、全局配置文件

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中的書寫方式來介紹。

    1.tomcat端口配置

server.port=8888

    2.修改Spring MVC攔截路徑規則

默認Spring MVC攔截路徑規則是/,若是要修改爲*.html的話,能夠在全局配置文件中進行以下設置:

server.servlet-path=*.html

    3.視圖解析器配置

同樣的,Spring Boot也能夠經過全局配置文件對視圖解析器進行配置:

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

    4.日誌輸出

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文件在書寫時,須要注意一個地方:冒號與值中間是存在空格的!

    1.自定義屬性

全局配置文件並不僅是配置Spring Boot中已經存在的屬性,咱們也能夠自定義屬性(別忘了,它自己就是一個properties文件),代碼須要使用@Value("${xxx}")註解來獲取這些屬性,如:

    2.屬性引用屬性

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

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

    3.屬性轉對象

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

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

相關文章
相關標籤/搜索