當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
main spring启动_SpringBoot学习(一):为什么main方法启动类需要放在项目根目录...
生活随笔
收集整理的這篇文章主要介紹了
main spring启动_SpringBoot学习(一):为什么main方法启动类需要放在项目根目录...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、概述
- 使用SpringBoot的應用是需要將應用代碼編譯打包成jar包,然后基于main方法的方式來獨立啟動這個應用,使得該應用作為一個獨立進程運行。這是跟傳統的將項目打包成war包,然后部署到tomcat服務器去運行的一個區別。
- 而在應用當中,這個包含main方法的啟動類需要放在項目的根目錄,與所有包平級,一般在main方法內部通過執行SpringApplication.run方法來啟動應用。啟動類自身是一個基于注解的配置類,一般使用@SpringBootApplication注解,而這個注解由三個注解組成,分別是:@SpringBootConfiguration,@ComonentScan,@EnableAutoConfiguration。所以也可以單獨使用這三個注解。
- 一個典型的SpringBoot項目結構如下:
二、注解分析
@SpringBootConfiguration:配置類
- 繼承于@Configuration,本身只是說明這是一個SpringBoot項目的配置類,功能與@Configuration一樣,使得Spring容器知道需要跟處理@Configuration注解的類一樣處理這個類。
@ComponentScan:基于注解的類掃描
- 用于進行包掃描,檢查類是否使用了@Controller,@Service等注解,有則獲取這些類創建對應的bean對象注冊到Spring的IOC容器;
@EnableAutoConfiguration:SpringBoot的自動配置特性
- 該注解是SpringBoot引入的,用于自動配置,即基于項目配置pom.xml引入的SpringBoot的starter相關包和項目添加的配置類,判斷是使用SpringBoot的starter包提供的配置類還是使用項目定義的配置類,如假如在pom.xml中引入了spring-boot-starter-data-redis包,則如果項目沒有自定義RedisTemplate類實現,則SpringBoot會自動配置和注入一個RedisTemplate對象到Spring的IOC容器中。
- 工作過程為:掃描項目的所有包,檢測項目中是否存在與SpringBoot自動添加的starter包對應功能組件類相同的類,或者實現了相同的接口或者繼承了相同的父類的類,有則使用項目自身提供的該功能組件類實現,沒有則使用SpringBoot自動添加的該功能組件類。SpringBoot的starter包自動添加的這些功能組件類通常是使用了@Configuration注解和@Conditional注解的,所以可以實現條件化注入。
三、main方法啟動類位于項目根目錄的原因
- @ComponentScan注解有個特性:如果不指定需要掃描的包或者需要注冊的類,則默認是掃描該使用@ComponentScan注解的類所在的包以及子包,所以將使用了@SpringBootApplication注解的包含main方法的啟動類放在項目根目錄,則會掃描項目的所有包。
- 除了@ComponentScan注解之外,@EnableAutoConfiguration注解也是掃描使用了這個注解的類所在的包及其子包,故放在項目根目錄,則可以掃描項目所有的包,對所有的類(具體為使用Spring容器管理的)進行檢測,從而決定是否需要自動創建功能組件類的bean對象到spring的IOC容器中。
總結
以上是生活随笔為你收集整理的main spring启动_SpringBoot学习(一):为什么main方法启动类需要放在项目根目录...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件测试学习笔记】易用性测试概念及测试
- 下一篇: spring boot2.x设置sess