Spring Boot 主程序:@SpringBootApplication及相关注解的介绍

       只要有springboot知识的都应该知道,@SpringBootApplication可以用来标注主程序,启动springboot应用,如下代码就是最常见的启动方法:

@SpringBootApplication
public class HelloWorldMainApplication {

    public static void main(String[] args) {

        // 启动Spring应用
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

@SpringBootApplication:该注解标注在一个类上,说明该类是springboot的主配置类,我们可以通过运行该类的main方法来启动springboot应该程序;

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接口中又标注了很多注解,这些注解共同作用使得springboot应用得以启动。


@SpringBootConfiguration:该注解标注的类表示这是一个springboot的配置类;

SpringBootConfiguration接口的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}

@Configuration:该注解表示该类是一个配置类,相当于之前的配置文件,SpringBootConfiguration就是通过该注解起作用的。


@EnableAutoConfiguration:开启自动配置功能,以前我们需要自己配置的东西,springboot帮助我们自动配置,该注解的作用就是告诉springboot开启自动配置功能。

@EnableAutoConfiguration接口的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

@AutoConfigurationPackage:该注解告诉springboot自动配置包;

​ @Import(AutoConfigurationPackages.Registrar.class):该注解是spring底层的一个注解,其作用是向容器中导入组件,而导入组件的功能是由AutoConfigurationPackages.Registrar.class来完成的,它将主配置类(即:@SpringBootApplication标注的类)所在的包及其下面所有子包里的所有组件扫描到spring容器中。

@EnableAutoConfigurationImportSelector:导入组件选择器,它向容器中导入许多自动配置类(即:上图中的xxxAutoConfiguration),换句话说就是向容器中导入需要的组件。


        springboot正是通过这些注解起到自动配置的作用,将之前大量需要手动配置的组件通过注解的方式进行自动配置,大大减少了手工配置的工作量,降低了创建工程的难度,使得创建工程变得更加简洁高效,这也是现在springboot被大量使用的原因。

猜你喜欢

转载自blog.csdn.net/XU906722/article/details/81462878