springboot如何自動配置

首先我們都知道springboot都是基於註解簡化配置,啓動類註解@SpringBootApplication+run方法就實現大量starter自動配置,源碼:

@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 {
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
	String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
	Class<?>[] exclude() default {};
	String[] excludeName() default {};
}

 先從spring.factories配置文件中加載自動配置類;加載的自動配置類中排出@EnableAutoConfiguration註解的exclude指定的配置類;再用AutoConfigurationImportFilter接口過濾符合@ConditionalOnClass,@ConditionalOnBean,@ConditionalOnWebApplication條件的結果;然後觸發AutoConfigurationImportEvent事件,告訴ConditionEvaluationReport評估報告器分別記錄符合條件和exclude的自動配置類;最後spring再講最後篩選的自動配置類導入IOC容器中;

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章