摘要:文章目錄的核心注解的執行流程的擴展點的核心注解內含個子注解該注解用于中,被該注解標注的表示,該類是個配置類。通知完畢調用的。
文章目錄
1、@SpringBootApplication -- SpringBoot的核心注解
2、SpringApplication的執行流程
3、SpringApplication的擴展點
1、@SpringBootApplication -- SpringBoot的核心注解
@SpringBootApplication 內含3個子注解:
1.1、@Configuration
該注解用于JavaConfig中,被該注解標注的表示,該類是個配置類。
1.2、@ComponentScan
自動掃描注解,掃描路徑下的組件或者Bean
1.3@EnableAutoConfiguration
@EnableAutoConfiguration是個復合注解,源代碼如下
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({EnableAutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class>[] exclude() default {}; String[] excludeName() default {}; }
@EnableAutoConfiguration 最關鍵的是@Import({EnableAUtoConfigurationImportSelector.class}) 注解。
該注解的功能是幫助SpringBoot應用將所有符合條件的@Configuration配置都加載到當前SpringBoot應用
1.4自動配置的幕后英雄:SpringFactoriesLoader
該類的作用是加載SpringBoot應用下META-INF/spring.factories配置文件。該配置文件是一個Properties文件。
在spring-boot 和 spring-boot-autoconfig 的META-INF/spring.factories中定義了自動配置的類
1.5@EnableAutoConfiguration綜述
通過1.3、1.4的描述。@EnableAutoConfiguration的作用可以描述為:從classpath下搜尋所有的META-INF/spring.factories配置文件,并將EnableAutoConfiguration對應的配置項通過反射實例化為對應標注了@Configuration的IoC容器配置類,然后匯總為一個并加載到IoC容器中
2、SpringApplication的執行流程
2.1、SpringApplication在實例化之前
2.1.1、SpringApplication在實例化之前會根據你的應用決定創建web類型或者是標準的ApllicationContext
2.1.2、使用SpringFactoriesLoader在classpath下查找并加載所有可用的ApplicationContextInitializer
2.1.3、使用SpringFactoriesLoader在classpath下查找并加載所有可用的ApplicationListener
2.2、SpringApplication實例化完成并設置之后
1、通過SpringFactoriesLoader加載SpringApplicationRunListener(創建監聽器)
2、創建應用需要的Environment(創建應用所需環境)
3、Environment創建完畢,SpringApplicationRunListner調用environmentPrepared()。(通知完畢)
4、根據當前應用創建ApplicationContext
5、調用ApplicationContextInitialzer,對ApplicationContext進一步處理(進一步處理)
6、處理完畢,SpringApplicationRunListner調用contextPrepared().(通知完畢)
7、將之前通過@EnableAutoConfiguration獲取的所有配置以及其他形式的IoC容器配置加載到已經準備完畢的ApplicationContex
8、SpringApplicationRunListener調用contextLoader()。(通知完畢)
9、調用ApplicationContext的refresh()。完成IoC容器可以的最后一道程序
10、調用SpringApplicationRunListener的finish()。(通知完成)
3、SpringApplication的擴展點
1、SpringApplicationRunListner(事件通知的監聽者)
實現請參考-->默認實現類--EventPublishingRunListener
2、ApplicationListener(監聽某類事件的發生)
Demo:
public class Listener implements ApplicationListener{ @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { } }
3、ApplicationContextInitializer(進一步處理ApplicationContext)
Demo
public class Demo implements ApplicationContextInitializer { @Override public void initialize(ConfigurableApplictionContext application) }
4、CommandLineRunner
CommandLineRunner的執行點在main方法執行完成之前最后一步
SpringBoot中的所有CommandLineRunner都會被加載執行
CommandLinerRunner 最好使用@Ordered注解標注順序
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71078.html
摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:定時任務間隔時間方式執行一次定時任務線程休眠規定時間類類允許調度一個任務。引入依賴配置測試執行一次定時任務使用注解是為定時任務而生的一個注解,查看注解的源碼表達式接收一個。 本文旨在用通俗的語言講述枯燥的知識 定時任務作為一種系統調度工具,在一些需要有定時作業的系統中應用廣泛,如每逢某個時間點統計數據、在將來某個時刻執行某些動作...定時任務在主流開發語言均提供相應的API供開發者調用...
摘要:本文介紹如何在中使用默認的聲明式緩存定義和接口用來統一不同的緩存技術。在使用集成的時候,我們需要注冊實現的的。默認使用在我們不使用其他第三方緩存依賴的時候,自動采用作為緩存管理器。源碼下載參考資料揭秘與實戰二數據緩存篇快速入門 本文介紹如何在springboot中使用默認的spring cache 聲明式緩存 Spring 定義 CacheManager 和 Cache 接口用來統一不...
摘要:開頭正式開啟我入職的里程,現在已是工作了一個星期了,這個星期算是我入職的過渡期,算是知道了學校生活和工作的差距了,總之,盡快習慣這種生活吧。當時是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...
閱讀 3072·2021-10-27 14:16
閱讀 2882·2021-09-24 10:33
閱讀 2291·2021-09-23 11:21
閱讀 3234·2021-09-22 15:14
閱讀 818·2019-08-30 15:55
閱讀 1681·2019-08-30 15:53
閱讀 1749·2019-08-29 11:14
閱讀 2194·2019-08-28 18:11