摘要:文章目錄的核心注解的執(zhí)行流程的擴(kuò)展點(diǎn)的核心注解內(nèi)含個(gè)子注解該注解用于中,被該注解標(biāo)注的表示,該類是個(gè)配置類。通知完畢調(diào)用的。
文章目錄
1、@SpringBootApplication -- SpringBoot的核心注解
2、SpringApplication的執(zhí)行流程
3、SpringApplication的擴(kuò)展點(diǎn)
1、@SpringBootApplication -- SpringBoot的核心注解
@SpringBootApplication 內(nèi)含3個(gè)子注解:
1.1、@Configuration
該注解用于JavaConfig中,被該注解標(biāo)注的表示,該類是個(gè)配置類。
1.2、@ComponentScan
自動(dòng)掃描注解,掃描路徑下的組件或者Bean
1.3@EnableAutoConfiguration
@EnableAutoConfiguration是個(gè)復(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自動(dòng)配置的幕后英雄:SpringFactoriesLoader
該類的作用是加載SpringBoot應(yīng)用下META-INF/spring.factories配置文件。該配置文件是一個(gè)Properties文件。
在spring-boot 和 spring-boot-autoconfig 的META-INF/spring.factories中定義了自動(dòng)配置的類
1.5@EnableAutoConfiguration綜述
通過(guò)1.3、1.4的描述。@EnableAutoConfiguration的作用可以描述為:從classpath下搜尋所有的META-INF/spring.factories配置文件,并將EnableAutoConfiguration對(duì)應(yīng)的配置項(xiàng)通過(guò)反射實(shí)例化為對(duì)應(yīng)標(biāo)注了@Configuration的IoC容器配置類,然后匯總為一個(gè)并加載到IoC容器中
2、SpringApplication的執(zhí)行流程
2.1、SpringApplication在實(shí)例化之前
2.1.1、SpringApplication在實(shí)例化之前會(huì)根據(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、通過(guò)SpringFactoriesLoader加載SpringApplicationRunListener(創(chuàng)建監(jiān)聽(tīng)器)
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,對(duì)ApplicationContext進(jìn)一步處理(進(jìn)一步處理)
6、處理完畢,SpringApplicationRunListner調(diào)用contextPrepared().(通知完畢)
7、將之前通過(guò)@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)聽(tīng)者)
實(shí)現(xiàn)請(qǐng)參考-->默認(rèn)實(shí)現(xiàn)類--EventPublishingRunListener
2、ApplicationListener(監(jiān)聽(tīng)某類事件的發(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都會(huì)被加載執(zhí)行
CommandLinerRunner 最好使用@Ordered注解標(biāo)注順序
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71078.html
摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(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...
摘要:定時(shí)任務(wù)間隔時(shí)間方式執(zhí)行一次定時(shí)任務(wù)線程休眠規(guī)定時(shí)間類類允許調(diào)度一個(gè)任務(wù)。引入依賴配置測(cè)試執(zhí)行一次定時(shí)任務(wù)使用注解是為定時(shí)任務(wù)而生的一個(gè)注解,查看注解的源碼表達(dá)式接收一個(gè)。 本文旨在用通俗的語(yǔ)言講述枯燥的知識(shí) 定時(shí)任務(wù)作為一種系統(tǒng)調(diào)度工具,在一些需要有定時(shí)作業(yè)的系統(tǒng)中應(yīng)用廣泛,如每逢某個(gè)時(shí)間點(diǎn)統(tǒng)計(jì)數(shù)據(jù)、在將來(lái)某個(gè)時(shí)刻執(zhí)行某些動(dòng)作...定時(shí)任務(wù)在主流開(kāi)發(fā)語(yǔ)言均提供相應(yīng)的API供開(kāi)發(fā)者調(diào)用...
摘要:本文介紹如何在中使用默認(rèn)的聲明式緩存定義和接口用來(lái)統(tǒng)一不同的緩存技術(shù)。在使用集成的時(shí)候,我們需要注冊(cè)實(shí)現(xiàn)的的。默認(rèn)使用在我們不使用其他第三方緩存依賴的時(shí)候,自動(dòng)采用作為緩存管理器。源碼下載參考資料揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇快速入門(mén) 本文介紹如何在springboot中使用默認(rèn)的spring cache 聲明式緩存 Spring 定義 CacheManager 和 Cache 接口用來(lái)統(tǒng)一不...
摘要:開(kāi)頭正式開(kāi)啟我入職的里程,現(xiàn)在已是工作了一個(gè)星期了,這個(gè)星期算是我入職的過(guò)渡期,算是知道了學(xué)校生活和工作的差距了,總之,盡快習(xí)慣這種生活吧。當(dāng)時(shí)是看的廖雪峰的博客自己也用做爬蟲(chóng)寫(xiě)過(guò)幾篇博客,不過(guò)有些是在前人的基礎(chǔ)上寫(xiě)的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開(kāi)頭 2017.08.21 正式開(kāi)啟我...
閱讀 3130·2021-10-27 14:16
閱讀 2940·2021-09-24 10:33
閱讀 2353·2021-09-23 11:21
閱讀 3272·2021-09-22 15:14
閱讀 871·2019-08-30 15:55
閱讀 1735·2019-08-30 15:53
閱讀 1831·2019-08-29 11:14
閱讀 2235·2019-08-28 18:11