Spring Boot 註解收集 - @SpringBootApplication

從哪一個版本引入?

從1.2.0這個版本開始引入,在以前的版本,通常的應用都會用到以下兩個個類來啓動SpringBoot應用:java

  • @EnableAutoConfiguration: 啓動自動配置,此註釋自動載入應用程序所需的全部Bean。包括從classpath的spring.factories文件加載configuration,並初始化bean的操做
  • @ComponentScan:從配置路徑中,掃描其餘相關的spring bean

@SpringBootApplication 包含什麼?

觀察源碼(Spring boot - 2.1.x):spring

@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 {};

}
  1. 包含的註解:
    1. @EnableAutoConfiguration
    2. @ComponentScan
    3. @SpringBootConfiguration:這個註解標明瞭用哪一個註解做爲SpringBoot應用啓動的註解,一個Spring應用只能存在一個@SpringBootConfiguration修飾的註解
    4. @Configuration這個是隱藏包含,對於@SpringBootApplication修飾的類,也能夠用@Bean指定加載初始化bean
  2. 包含的配置:
    1. exclude: 是個list,排除這些類,不加載,通常是Configuration修飾的類
    2. excludeNames: 做用同上,可是經過名字匹配。
    3. scanBasePackageClasses: @ComponentScan掃描的類的list
    4. scanBasePackages:@ComponentScan掃描的包的list

對比

不使用@SpringBootApplicationspa

@EnableAutoConfiguration(exclude={Book.class})
@ComponentScan({"net.javabeat"})
@Configuation
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
	@Bean
	public Test getTest() {
	    return new Test();
	}
}

使用@SpringBootApplicationcode

@SpringBootApplication(exclude=Book.class,scanBasePackages={"net.javabeat"})
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
	@Bean
	public Test getTest() {
	    return new Test();
	}
}
相關文章
相關標籤/搜索