概述
许多使用Spring Boot的开发者总是有带有@Configuration, @EnableAutoConfiguration 和 @ComponentScan 注解的主类。由于这些注解很频繁地被用在一起,Spring Boot提供了一个方便的注解@SpringBootApplication 来替代。
@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 {
}
@ComponentScan
在 application 所在的包上启用@Component扫描
Spring里有四大注解:@Service,@Repository,@Component,@Controller用来定义一个bean。@ComponentScan注解就是用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean。可以通过设置@ComponentScan中basePackages,includeFilters,excludeFilters属性来动态确定自动扫描范围。
@SpringBootConfiguration
允许在 context 或 import 其他 configuration classes 中注册额外的 beans
这个注解的作用与@Configuration作用相同,都是用来声明当前类是一个配置类.可以通过@Bean注解生成IOC容器管理的bean。
@EnableAutoConfiguration
启用Spring Boot的auto-configuration 机制
@EnableAutoConfiguration是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中。@EnableAutoConfiguration源码通过@Import注入了一个ImportSelector的实现类,AutoConfigurationImportSelector,这个ImportSelector最终实现根据我们的配置,动态加载所需的bean。