摘要:如下頁(yè)面模版的配置啟動(dòng)簡(jiǎn)單流程當(dāng)我們運(yùn)行的方法時(shí)調(diào)用靜態(tài)方法首先是實(shí)例化初始化的時(shí)候主要做主要做三件事根據(jù)下是否存在判斷是否要啟動(dòng)一個(gè)。將配置環(huán)境加入到監(jiān)聽(tīng)器對(duì)象中。方法將等重要組件與上下文對(duì)象關(guān)聯(lián)。自此的簡(jiǎn)單流程到此結(jié)束。
正文
說(shuō)springboot的啟動(dòng)流程當(dāng)然少不了springboot啟動(dòng)入口類
@SpringBootApplication public class SpringBootWebApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(SpringBootWebApplication.class); application.run(args); } }
以上代碼很容易看出哪些是關(guān)鍵,當(dāng)然是@SpringBootApplication和application.run()分別是springboot加載配置和啟動(dòng),下面詳細(xì)說(shuō)明這兩塊。
1.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 { }
其中@Configuration(@SpringBootConfiguration中其實(shí)用的也是@Configuration);@EnableAutoConfiguration;@ComponentScan三個(gè)是最重要的注解,@SpringBootApplication整合了三個(gè)注解使用者寫起來(lái)看起來(lái)都比較簡(jiǎn)潔。
1.1@Configuration它就是JavaConfig形式的Spring Ioc容器的配置類使用的那個(gè)@Configuration,這里的啟動(dòng)類標(biāo)注了@Configuration之后,本身其實(shí)也是一個(gè)IoC容器的配置類。如下案例說(shuō)明xml和注解實(shí)現(xiàn)bean的定義
1.2@EnableAutoConfiguration
@SuppressWarnings("deprecation") @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {
@EnableAutoConfiguration簡(jiǎn)單的說(shuō)它的作用就是借助@Import的支持,收集和注冊(cè)特定場(chǎng)景相關(guān)的bean定義。其中,最關(guān)鍵的要屬@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以幫助SpringBoot應(yīng)用將所有符合條件的@Configuration配置都加載到當(dāng)前SpringBoot創(chuàng)建并使用的IoC容器。借助于Spring框架原有的一個(gè)工具類:SpringFactoriesLoader的支持很智能的自動(dòng)配置:
SpringFactoriesLoader其主要功能就是從指定的配置文件META-INF/spring.factories加載配置。將其中org.springframework.boot.autoconfigure.EnableutoConfiguration對(duì)應(yīng)的配置項(xiàng)通過(guò)反射(Java Refletion)實(shí)例化為對(duì)應(yīng)的標(biāo)注了@Configuration的JavaConfig形式的IoC容器配置類,然后匯總為一個(gè)并加載到IoC容器。(如下頁(yè)面模版的配置)
1.3springboot啟動(dòng)簡(jiǎn)單流程1.3.1 當(dāng)我們運(yùn)行SpringApplication的main方法時(shí),調(diào)用靜態(tài)方法run()首先是實(shí)例化,SpringApplication初始化的時(shí)候主要做主要做三件事:
根據(jù)classpath下是否存在(ConfigurableWebApplicationContext)判斷是否要啟動(dòng)一個(gè)web applicationContext。
SpringFactoriesInstances加載classpath下所有可用的ApplicationContextInitializer
SpringFactoriesInstances加載classpath下所有可用的ApplicationListener
1.3.2 SpringApplicatio實(shí)例化完成并且完成配置后調(diào)用run()方法,首先遍歷初始化過(guò)程中加載的SpringApplicationRunListeners,然后調(diào)用starting(),開(kāi)始監(jiān)聽(tīng)springApplication的啟動(dòng)。
1.3.3 加載SpringBoot配置環(huán)境(ConfigurableEnvironment),如果是通過(guò)web容器發(fā)布,會(huì)加載StandardEnvironment。將配置環(huán)境(Environment)加入到監(jiān)聽(tīng)器對(duì)象中(SpringApplicationRunListeners)。
1.3.4 banner屬性的設(shè)置
1.3.5 ConfigurableApplicationContext(應(yīng)用配置上下文)創(chuàng)建,根據(jù)webEnvironment是否是web環(huán)境創(chuàng)建默認(rèn)的contextClass
,AnnotationConfigEmbeddedWebApplicationContext(通過(guò)掃描所有注解類來(lái)加載bean)和ConfigurableWebApplicationContext),最后通過(guò)BeanUtils實(shí)例化上下文對(duì)象,并返回。
1.3.6 prepareContext()方法將listeners、environment、applicationArguments、banner等重要組件與上下文對(duì)象關(guān)聯(lián)。
1.3.7 refreshContext(context),bean的實(shí)例化完成IoC容器可用的最后一道工序。
1.3.8 最后springboot做一些收尾工作。自此springboot的簡(jiǎn)單流程到此結(jié)束。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69167.html
摘要:的這幾天看了看的請(qǐng)求處理流程,因?yàn)橹耙恢庇玫暮停婚_(kāi)始對(duì)的處理流程有點(diǎn)懵逼,找不到入口,后來(lái)跟了代碼,在網(wǎng)上找了點(diǎn)資料,發(fā)現(xiàn)的入口在的方法該方法的作用就是把接收到的或者最終需要返回的,包裝轉(zhuǎn)換為和。 spring-cloud-gateway 的ReactorHttpHandlerAdapter 這幾天看了看spring-cloud-gateway的請(qǐng)求處理流程,因?yàn)橹耙恢庇玫膕pr...
摘要:本文參考官方文檔部分特定版本如版本官方文檔地址注本文基于構(gòu)建話說(shuō)在上已經(jīng)有多顆星了,足見(jiàn)火爆程度簡(jiǎn)介以下介紹引自創(chuàng)建獨(dú)立的應(yīng)用程序直接嵌入,或無(wú)需部署文件提供自己的入門來(lái)簡(jiǎn)化你的配置盡可能自動(dòng)配置提供生產(chǎn)就緒功能,如指標(biāo),運(yùn)行 本文參考 Spring Boot官方文檔 Part II. Getting Started部分特定版本如1.5.10.RELEASE版本官方文檔地址:https...
摘要:熱加載代表的是我們不需要重啟服務(wù)器,就能夠類檢測(cè)得到,重新生成類的字節(jié)碼文件無(wú)論是熱部署或者是熱加載都是基于類加載器來(lái)完成的。驗(yàn)證階段字節(jié)碼文件不會(huì)對(duì)造成危害準(zhǔn)備階段是會(huì)賦初始值,并不是程序中的值。 一、SpringBoot入門 今天在慕課網(wǎng)中看見(jiàn)了Spring Boot這么一個(gè)教程,這個(gè)Spring Boot作為JavaWeb的學(xué)習(xí)者肯定至少會(huì)聽(tīng)過(guò),但我是不知道他是什么玩意。 只是大...
摘要:前言以前總是利用創(chuàng)建工程來(lái)使用只知其然不知其所以然今天從搭建一個(gè)基于的的項(xiàng)目創(chuàng)建工程與安裝依賴?yán)没虻葎?chuàng)建一個(gè)工程一路即可此時(shí)的目錄結(jié)構(gòu)如下修改安裝首先在中加入繼承的主程序和一些依賴然后的加入程序依賴使成為項(xiàng)目框架主程序 前言 以前總是利用start.spring.io創(chuàng)建spring-boot工程來(lái)使用 ,只知其然不知其所以然 今天從0搭建一個(gè)基于mvnen的spring-boot...
摘要:這里使用的是數(shù)據(jù)庫(kù)啟動(dòng)類上加上注解在啟動(dòng)類中添加對(duì)包掃描掃描多個(gè)包下的可以有以下幾種方法掃描會(huì)自動(dòng)加載相關(guān)配置,數(shù)據(jù)源就會(huì)自動(dòng)注入到中,會(huì)自動(dòng)注入到中,可以直接使用。有配置文件下的使用掃描多個(gè)包下的可以有以下幾種方法掃描 Spring-Boot 學(xué)習(xí)筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot Spring-Boot是由Pivotal團(tuán)隊(duì)提供的全新框架...
閱讀 2951·2021-10-28 09:32
閱讀 2984·2021-10-11 10:57
閱讀 3131·2021-10-08 10:05
閱讀 2611·2021-09-28 09:36
閱讀 2223·2019-08-30 15:55
閱讀 2278·2019-08-30 15:44
閱讀 2404·2019-08-30 14:02
閱讀 3084·2019-08-29 17:16