@SpringBootApplication介绍

303 阅读1分钟
@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是一个复合注解由 

@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 组成

@ComponentScan 

用来指定扫描的组建所在的包路径或class文件。在不指定参数的时候,SpringBoot的@ComponentScan默认会扫描同目录及同目录下级目录的类文件,如果写的类的路径不在其中则需要特别指定

@SpringBootApplication(scanBasePackages = “com.cn.controller")
// 或
@ComponentScan(basePackages = "com.cn.controller")

@EnableAutoConfiguration 

@EnableAutoConfiguration让SpringBoot可以根据类路径中的jar包依赖可以为项目进行一些自动配置。这也是SpringBoot最核心的功能。当然,前提条件是依赖需要按照starter的规则来构建。 比如,我们添加了web的starter,那么SpringBoot就会自动添加Tomcat和SpringMVC的依赖,然后又会进行一些相应的默认配置。但有些依赖需要我们自己去配置一些内容,比如虽然引入了data-jpa的starter,但是如果我们不配置对应的数据源,程序肯定没办法正常启动。 

@SpringBootConfiguration

@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类, 并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。