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