【SpringBoot笔记1】@SpringBootApplication注解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hbtj_1216/article/details/84901192

1 简介

SpringBoot 的启动类里,默认使用了一个注解@SpringBootApplication

@SpringBootApplication
public class Application {

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

@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一个注解整合了三个注解的功能:

  • @Configuration
  • @EnableAutoConfiguration
  • @ComponentScan

注意,@Configuration@SpringBootConfiguration里面:

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

}

因此,可以使用这三个注解替换@SpringBootApplication,能够达到同样的效果:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

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

2 三个重要注解

2.1 @Configuration

SpringBoot中,被@Configuration 注解的类是一个配置类,相当于Spring中的xml配置文件。

2.2 @EnableAutoConfiguration

@EnableAutoConfiguration借助@Import注解使用AutoConfigurationImportSelector将所有符合自动配置条件的bean定义加载到SpringIoC容器中。

源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

	String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

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

	String[] excludeName() default {};
}

2.3 @ComponentScan

@ComponentScan的作用是开启Spring的自定扫描功能,将范围内被@Component 注解的类加载到容器中,并生成bean。可以通过basePackages等属性指定自动扫描的范围。如果不指定,则默认是从被@ComponentScan注解的类所在的package进行扫描,因此SpringBoot的启动类最好放在项目的root package下面,这样才能保证整个项目下的所有类都在扫描范围中。

3 @SpringBootApplication的4个属性

@SpringBootApplication 注解提供了4个属性可供配置:

  • exclude —— 根据Class对象来排除特定的类,不加入到Spring容器中,传入Class数组。
  • excludeName —— 根据类名来排除特定的类,不加入到Spring容器中,传入参数是类的全限定名数组。
  • scanBasePackages —— 指定自动扫描的包,参数是字符串数组。
  • scanBasePackageClasses —— 指定自动扫描的包,参数是Class对象数组。

猜你喜欢

转载自blog.csdn.net/hbtj_1216/article/details/84901192