每個(gè)SpringBoot應(yīng)用程序,都有1個(gè)主類,主類中包括main(),main()中調(diào)用SpringApplication的靜態(tài)方法run()來(lái)啟動(dòng)SpringBoot應(yīng)用程序。主類上會(huì)標(biāo)注@SpringBootApplication注解,它是1個(gè)組合注解,底層相當(dāng)于3個(gè)注解:@ComponentScan、@EnableAutoConfiguration和@Configuration
(1)@ComponentScan,掃描主類所在包路徑下的所有標(biāo)注@Component的Bean并進(jìn)行裝配,包括@Component的子類@Controller、@Service和@Dao
(2)@EnableAutoConfiguration,開(kāi)啟自動(dòng)配置,可以根據(jù)classpath和Bean定義自動(dòng)配置。在SpringBoot auto-config jar包的META-INF文件夾中有1個(gè)spring.factories文件,該文件包括一系列的KV,K為注解的全額限定名,V為當(dāng)使用注解時(shí),需要自動(dòng)配置的Bean。SpringBoot就是使用這種方式完成自動(dòng)配置
(3)@Configuration,Spring4的新注解,相當(dāng)于在xml配置文件中配置Bean。標(biāo)注@Configuration的類中包括1個(gè)或多個(gè)使用@Bean注解聲明的對(duì)象,@Configuration會(huì)將它們注入的Spring容器
(1)Spring Boot應(yīng)用程序主類main()會(huì)調(diào)用SpringApplication類的run(),該方法先創(chuàng)建1個(gè)SpringApplication對(duì)象;創(chuàng)建SpringApplication對(duì)象時(shí),會(huì)執(zhí)行它的初始化方法initialize(),initialize()會(huì)對(duì)SpringApplication賦一些初值,例如根據(jù)當(dāng)前classpath下是否有Servlet判斷應(yīng)用程序是WEB應(yīng)用程序還是非WEB應(yīng)用程序;初始化后,執(zhí)行SpringApplication對(duì)象的run(),在這個(gè)方法中創(chuàng)建ApplicationContext上下文環(huán)境,設(shè)置監(jiān)聽(tīng)器等