只要有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被大量使用的原因。