?Spring Boot HelloWorld
需求:瀏覽器發(fā)送hello請(qǐng)求,服務(wù)器接收請(qǐng)求并處理泰涂,響應(yīng)hello world字符串
?Hello World探究
pom文件及其父項(xiàng)目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
它的父項(xiàng)目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
? ? 它來真正管理spring boot應(yīng)用里面的所有依賴版本腌巾。(叫spring boot的版本仲裁中心)
? ? 所以以后我們導(dǎo)入依賴是默認(rèn)不需要寫版本的(但是,沒有在dependencies里面管理的依賴自然需要聲明版本號(hào))铲觉。
?啟動(dòng)器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web
? spring-boot-starter:spring-boot場(chǎng)景啟動(dòng)器(幫我們導(dǎo)入了web模塊正常運(yùn)行所依賴的組件)澈蝙。
? spring boot將所有的組件都抽取出來,做成了一個(gè)個(gè)的starters(啟動(dòng)器)撵幽,只需要在項(xiàng)目中引入相關(guān)場(chǎng)景啟動(dòng)器灯荧,就會(huì)自動(dòng)將所有的依賴導(dǎo)入進(jìn)項(xiàng)目,并從版本的仲裁中心自動(dòng)獲取相關(guān)的版本號(hào)盐杂。
? 主程序類(@SpringBootApplication)
@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 {? }
? **@SpringBootConfiguration**:spring boot的配置類(標(biāo)注在某個(gè)類上逗载,表示這是一個(gè)spring boot的配置類)哆窿;
? ? ? ? - @Configuration:配置類上來標(biāo)注這個(gè)注解。
? ? ? ? -配置類 就相當(dāng)于 配置文件厉斟;配置類也是容器中的一個(gè)組件(@Component)挚躯。
? **@EnableAutoConfiguration**:開啟自動(dòng)配置功能;
? ? ? ? -以前我們需要配置的東西擦秽,現(xiàn)在spring boot幫我們自動(dòng)配置码荔;注解@EnableAutoConfiguration告訴spring boot開啟自動(dòng)配置功能,
這樣自動(dòng)配置才能生效感挥。
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {}
? ? ? ? @AutoConfigurationPackage:自動(dòng)配置包缩搅,
? ? ? ? **作用:將主配置類(@SpringBootAllication標(biāo)注的類)的所在包及下面子包里面的所有組件掃描到spring容器中。**
? ? ? ? ? ? - @Import({Registrar.class}):spring的底層注解@import触幼,作用:給容器中導(dǎo)入一個(gè)組件硼瓣,組件由Registrar.class來指定。
@Import({AutoConfigurationImportSelector.class})
- AutoConfigurationImportSelector :導(dǎo)入那些組件的選擇器
?- public String[] selectImports(AnnotationMetadata annotationMetadata)置谦;
將所有需要的組件以全類名的方式返回String[]類型堂鲤,這些組件就會(huì)被添加到容器中。
這些組件會(huì)給容器中導(dǎo)入非常多的自動(dòng)配置類(xxxAutoConfiguration)霉祸,就是給容器中導(dǎo)入這個(gè)場(chǎng)景需要的所有的組件筑累,
并配置好這些組件。
? ? ? ? ? ? - 有了自動(dòng)配置類丝蹭,就可以免去我們手動(dòng)編寫配置和注入功能組件等的工作慢宗。
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,ClassLoader)
? ? ? ? ? ? - 從類路徑("META-INF/spring.factories")中獲取EnableAutoConfiguration指定的值。
### 總結(jié)
? ? **Spring Boot 在啟動(dòng)時(shí)奔穿,從類路徑META-INF/spring.factories中獲取EnableAutoConfiguration指定的值镜沽,將這些值作為自動(dòng)配置類導(dǎo)入到容器中,自動(dòng)配置類就會(huì)生效贱田,幫我們進(jìn)行自動(dòng)配置工作缅茉。**
?以前我們需要自己配置的東西,自動(dòng)配置類都幫我們自動(dòng)配置了男摧。
J2EE的整體整合解決方案和自動(dòng)配置都在spring-boot-autoconfigure-2.2.1.RELEASE.jar中