通常,我们在SpringBoot项目中会看到这样一段类似代码,作为SpringBoot项目的调试启动类。
@ComponentScan("com.broadview.*")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SamplesApplication {
public static void main(String[] args) {
SpringApplication.run(SamplesApplication.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 {
}
可以理解为 @SpringBootApplication其实就是以下三个注解的总和
@SpringBootConfiguration: 用于定义一个配置类
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
@EnableAutoConfiguration :Spring Boot会自动根据你jar包的依赖来自动配置项目,也就是实现自动装配。
@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 {};
}
@ComponentScan: 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
就是扫描所标注的类所在包下的所有需要注入的组件,将其注入,这个注解会自动注入所有在主程序所在包下的组件,相当于SSM项目中的以下配置内容:
<context:component-scan base-package=”com.xxx”></context:component-scan>
参考内容: https://blog.csdn.net/qq_28289405/article/details/81302498