天天看點

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

@SpringBootApplication

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories
@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";

    /**
     * Exclude specific auto-configuration classes such that they will never be applied.
     * @return the classes to exclude
     */
    Class<?>[] exclude() default {};

    /**
     * Exclude specific auto-configuration class names such that they will never be
     * applied.
     * @return the class names to exclude
     * @since 1.3.0
     */
    String[] excludeName() default {};

}      

注意到AutoConfigurationImportSelector類

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

傳回AutoConfigurationImportSelector.AutoConfigurationEntry基礎上, AnnotationMetadata import的@Configuration類。

autoConfigurationMetadata - 自動配置的中繼資料

annotationMetadata - 配置類的注釋中繼資料

傳回:應導入自動配置

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

獲得配置

傳回應該被視為自動配置類名。 預設情況下,此方法将使用加載候選人SpringFactoriesLoader與getSpringFactoriesLoaderFactoryClass()

中繼資料 - 源中繼資料

屬性-将annotation attributes

傳回:候選配置清單

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories
  • 看下其中的斷言中指定的

META-INF/spring.factories

為我們實作了很多自動裝配

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

我們随便看下這個類

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

内嵌的 tomcat

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

其實就是開啟 springMVC,這隻是 sb 批量自動裝配的一個元件

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

ServletWebServerFactoryAutoConfiguration

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

自動裝配 - 啟動一個内嵌的 tomcat

@SpringBootApplication注解到底做了什麼,你真的了解嗎?@SpringBootApplicationMETA-INF/spring.factories

繼續閱讀