在上篇中咱們成功運行了一個簡單的web應用,其中有一個註解被輕易的帶過了,但它在Spring Boot中是最重要的註解,沒有之一,它就是@SpringBootApplication,本篇將對它與Spring Boot的配置進行深刻的介紹。html
前面已經說過了,通常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
@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
@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
@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 { ... }
其餘的取消自動配置以此類推。
這個知識點其實對開發意義不太,但不妨瞭解下(能夠裝個逼~~)。在Spring Boot項目啓動時,控制檯會輸出一個"spring>>>"的banner文字圖案,如:
這個banner是能夠自定義的,自定義的方法很簡單:只須要把想輸出的文字保存在banner.txt文件中,而後把這個banner.txt放到resources目錄下便可:
運行項目,而後控制檯就能夠輸出banner.txt中的文字了。
Text to ASCII Art Generator (TAAG)這個網站能夠獲得文字圖案。
Spring Boot爲咱們提供了簡化企業級開發絕大多數場景的start pom(相似於組件),只要使用了對應的starter pom,Spring Boot就會爲咱們提供自動配置的Bean。
這裏官方給出的starter,如下是"好心人"對這些Starter pom作的翻譯:
怎麼使用?直接在pom.xml中引入依賴便可(不懂請參考上篇中「第一個Web應用」中pom.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的端口配置等。
這部分使用application.properties中的書寫方式來介紹。
server.port=8888
默認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
這部分使用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開發進行介紹。