Springboot 啟動簡析
阿新 • • 發佈:2020-12-28
入口程式
首先,我們回到到夢開始的地方
@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