文章目錄
一、@SpringBootApplication -- SpringBoot的核心註解
二、SpringApplication的執行流程
三、SpringApplication的擴展點web
一、@SpringBootApplication -- SpringBoot的核心註解
@SpringBootApplication 內含3個子註解:spring
1.一、@Configuration
該註解用於JavaConfig中,被該註解標註的表示,該類是個配置類。app
1.二、@ComponentScan
自動掃描註解,掃描路徑下的組件或者Beanide
1.3@EnableAutoConfiguration
@EnableAutoConfiguration是個複合註解,源代碼以下spring-boot
@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應用spa
1.4自動配置的幕後英雄:SpringFactoriesLoader
該類的做用是加載SpringBoot應用下META-INF/spring.factories配置文件。該配置文件是一個Properties文件。
在spring-boot 和 spring-boot-autoconfig 的META-INF/spring.factories中定義了自動配置的類code
1.5@EnableAutoConfiguration綜述
經過1.三、1.4的描述。@EnableAutoConfiguration的做用能夠描述爲:從classpath下搜尋全部的META-INF/spring.factories配置文件,並將EnableAutoConfiguration對應的配置項經過反射實例化爲對應標註了@Configuration的IoC容器配置類,而後彙總爲一個並加載到IoC容器中blog
二、SpringApplication的執行流程事件
2.一、SpringApplication在實例化以前
2.1.一、SpringApplication在實例化以前會根據你的應用決定建立web類型或者是標準的ApllicationContext
2.1.二、使用SpringFactoriesLoader在classpath下查找並加載全部可用的ApplicationContextInitializer
2.1.三、使用SpringFactoriesLoader在classpath下查找並加載全部可用的ApplicationListener圖片
2.二、SpringApplication實例化完成並設置以後
一、經過SpringFactoriesLoader加載SpringApplicationRunListener(建立監聽器)
二、建立應用須要的Environment(建立應用所需環境)
三、Environment建立完畢,SpringApplicationRunListner調用environmentPrepared()。(通知完畢)
四、根據當前應用建立ApplicationContext
五、調用ApplicationContextInitialzer,對ApplicationContext進一步處理(進一步處理)
六、處理完畢,SpringApplicationRunListner調用contextPrepared().(通知完畢)
七、將以前經過@EnableAutoConfiguration獲取的全部配置以及其餘形式的IoC容器配置加載到已經準備完畢的ApplicationContex
八、SpringApplicationRunListener調用contextLoader()。(通知完畢)
九、調用ApplicationContext的refresh()。完成IoC容器能夠的最後一道程序
十、調用SpringApplicationRunListener的finish()。(通知完成)
三、SpringApplication的擴展點
一、SpringApplicationRunListner(事件通知的監聽者)
實現請參考-->默認實現類--EventPublishingRunListener
二、ApplicationListener(監聽某類事件的發生)
Demo:
public class Listener implements ApplicationListener<ContextRefreshEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { } }
三、ApplicationContextInitializer(進一步處理ApplicationContext)
Demo
public class Demo implements ApplicationContextInitializer { @Override public void initialize(ConfigurableApplictionContext application) }
四、CommandLineRunnerCommandLineRunner的執行點在main方法執行完成以前最後一步SpringBoot中的全部CommandLineRunner都會被加載執行CommandLinerRunner 最好使用@Ordered註解標註順序