SpringBoot SpringApplication底层源码分析与自动装配

 目录

抛出问题

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

大家可以看到,如上所示是一个很常见的SpringBoot启动类,我们可以看到仅仅使用了一个Main方法就启动了整个SpringBoot项目是不是很神奇,下面我们来仔细剖析以下这一段代码,这段代码中我们可以仔细地观察到最重要的两个部分,分别是@SpringBootApplication注解和SpringApplication这个类。

  • @SpringBootApplication注解
  • SpringApplication类

@SpringBootApplication注解剖析

打开这个@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 {      @AliasFor(annotation = EnableAutoConfiguration.class)     Class<?>[] exclude() default {};       @AliasFor(annotation = EnableAutoConfiguration.class)     String[] excludeName() default {};       @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")     String[] scanBasePackages() default {};      @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")     Class<?>[] scanBasePackageClasses() default {};  }

我们可以发现;我们可以在@SpringBootApplication注解中使用exclude(),excludeName(),scanBasePackages(),scanBasePackageClasses() 这四个方法来进行自定义我们需要排除装配的Bean,扫描包路径,扫描类路径。

搭眼一瞅,在@SpringBootApplication注解上还有下面那么多注解。

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = {         
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信