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