1. 程式人生 > 實用技巧 >Springboot 啟動簡析

Springboot 啟動簡析

入口程式

首先,我們回到到夢開始的地方

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

大道極簡,上面的的程式碼非常簡潔,背後蘊藏著何種玄機,我們一步一步來揭開。
上面的兩處地方,讓我們既熟悉又陌生,分別是@SpringBootApplication 這個註解,和SpringApplication的run 方法。

註解@SpringBootApplication淺析

首先,我們看下這個註解的原始碼

@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 {

}

通過上面的程式碼,我們可以看到,springbootApplication 這個註解是由多個註解組合而成的一個註解,接下來,我們分開看下上面的註解

  • @SpringbootConfigruation
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
    @AliasFor(  // 繼承 configuration 這個註解
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

這個註解的作用就是標註當前類是配置類,並會將當前類內宣告的一個或多個以@Bean註解標記的方法的例項納入到spring容器中,並且例項名就是方法名。

  • @EnableAutoConfiguration

  • @ComponentScan