說明:本文主要講解Spring Boot的一些常用的配置的作用及其原理
一、依賴管理
- 依賴管理
Spring Boot每次發佈時都會提供一個它所支持的精選依賴列表。實際上,在構建配置裏你不需要提供任何依賴的版本,因爲Spring Boot已經替你管理好了。當更新Spring Boot時,那些依賴也會一起更新。 - maven依賴默認配置
Maven用戶可以從spring-boot-starter-parent項目中繼承以獲得合理的默認值。父項目提供以下功能:
Java 1.8作爲默認的編譯器級別。
UTF-8源碼編碼。
允許你省略常見依賴的version標籤,相關的版本繼承自Spring Boot提前設置好的版本。 - 修改maven依賴默認配置
可以通過dependencyManagement來管理依賴列表 - Starters
Starters是一個依賴描述符的集合,你可以將它包含進項目中,這樣添加依賴就非常方便。你可以獲取所有Spring及相關技術的一站式服務,而不需要翻閱示例代碼,拷貝粘貼大量的依賴描述符。例如,如果你想使用Spring和JPA進行數據庫訪問,只需要在項目中包含spring-boot-starter-data-jpa依賴,然後你就可以開始了。
二、main類
- main類放在目錄頂層:
main 類放在頂層,隱式地定義了一個基礎的包掃描路徑,從頂層向下掃描一些註解、配置等,若不放在頂層,還需額外配置scanBasePackages屬性來掃描指定路徑。 - main類常用註解:
@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan。
1、@Configuration:提到@Configuration就要提到他的搭檔@Bean。使用這兩個註解就可以創建一個簡單的spring配置類,可以用來替代相應的xml配置文件。
@Configuration的註解類標識這個類可以使用Spring IoC容器作爲bean定義的來源。@Bean註解告訴Spring,一個帶有@Bean的註解方法將返回一個對象,該對象應該被註冊爲在Spring應用程序上下文中的bean。
2、@EnableAutoConfiguration:能夠自動配置spring的上下文,試圖猜測和配置你想要的bean類,通常會自動根據你的類路徑和你的bean定義自動配置。
3、@ComponentScan:會自動掃描指定包下的全部標有@Component的類,並註冊成bean,當然包括@Component下的子註解@Service,@Repository,@Controller。
三、配置類
- 主配置類:
@EnableAutoConfiguration應該放到主配置類中,我們通常將main類作爲主配置類,主配置類有且僅有一個,需要配合@Configuration一起使用 - 自動配置:
自動配置可以關閉,你可以使@EnableAutoConfiguration 註解的exclude屬性禁用它們
自定義配置會覆蓋掉自動配置
四、Spring Beans和依賴注入
- 支持spring註解:
你可以自由地使用任何標準的Spring框架技術去定義beans和它們注入的依賴。簡單起見,我們經常使用@ComponentScan註解搜索beans,並結合@Autowired構造器注入。
如果遵循以上的建議組織代碼結構(將應用的main類放到包的最上層,即root package),那麼你就可以添加@ComponentScan註解而不需要任何參數,所有應用組件(@Component, @Service, @Repository, @Controller等)都會自動註冊成Spring Beans。
五、Devtools 開發工具
- 自動重啓:只要classpath下的文件有變動,它就會自動重啓
- 排除資源:
某些資源的變化沒必要觸發重啓,比如Thymeleaf模板可以隨時編輯。默認情況下,位於/META-INF/maven,/META-INF/resources,/resources,/static,/public或/templates下的資源變更不會觸發重啓,但會觸發實時加載(live reload)你可以使用spring.devtools.restart.exclude屬性自定義這些排除規則
六、日誌系統
-
SpringBoot底層日誌系統:
底層是使用slf4j(抽象)+logback(實現)的方式進行日誌記錄的 -
自定義日誌配置:
使用logback-spring.xml而不是logback.xml,你不能在標準的logback.xml配置文件中使用擴展,因爲它加載的太早了,Spring可能不能夠完全控制日誌初始化。 -
SpringBoot默認適配所有日誌系統,如果引入的其他框架攜帶日誌,需要使用exclusion排除掉。
七、Spring Web MVC框架
- Spring MVC自動配置
Spring Boot爲Spring MVC提供的auto-configuration適用於大多數應用,並在Spring默認功能上添加了以下特性:
1、視圖解析:引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。
2、對靜態資源的支持,包括對WebJars的支持。
3、類型轉換器:自動註冊Converter,GenericConverter,Formatter beans。
4、對HttpMessageConverters的支持。
自動註冊MessageCodeResolver。
對靜態index.html的支持。
對自定義Favicon的支持。
自動使用ConfigurableWebBindingInitializer bean。 - 使用Spring MVC默認配置
如果保留Spring Boot MVC特性,你只需添加其他的MVC配置(攔截器,格式化處理器,視圖控制器等)。你可以添加自己的WebMvcConfigurerAdapter類型的@Configuration類,而不需要註解@EnableWebMvc。如果希望使用自定義的RequestMappingHandlerMapping,RequestMappingHandlerAdapter,或ExceptionHandlerExceptionResolver,你可以聲明一個WebMvcRegistrationsAdapter實例提供這些組件。 - 不使用Spring MVC自動配置
如果想全面控制Spring MVC,你可以添加自己的@Configuration,並使用@EnableWebMvc註解,這時Spring MVC所有的自動配置都將失效。
更多內容詳見官網:
中文:https://www.breakyizhan.com/springboot/3398.html
英文:https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/howto.html#howto-spring-boot-application
持續更新……